11 Vote

Delphi/Lazarus: Convertir Variable Variant en Integer

Question de Invité | 29/11/2022 à 17:49

J'ai une valeur du type Variant, mais j'ai besoin du type de variable Integer dans mon programme pour pouvoir calculer avec la valeur.

En termes concrètes, il s'agit d'une fonction qui nécessite un numéro Integer. Dès que je passe la valeur Variant à cette fonction, le compilateur crée un message d'erreur.

Comment est-il possible de convertir ou de traduire une valeur de type Variant en une valeur de type Integer?

RépondrePositifNégatifDateVoix
2Meilleure Réponse2 Voix

Le moyen le plus simple consiste à définir une variable Integer et établir cette variable à la valeur de la variable Variant:

var
  v: variant;
  i: integer;
begin
  v := 1;
  i := v;

  v := '1';
  i := v;
end;

Cela est même possible dans le cas que la valeur Variant est en fait du type String (chaîne).

Si vous souhaitez néanmoins vérifier le type auparavant, vous pouvez utiliser la fonction VarType pour cela:

var
  v: variant;
  i: integer;
begin
  v := 1;
  
  if VarType(v) = varinteger then i := v;
end; 

VarType renvoie le type de la variable Variant. Veuillez noter: Il existe également d'autres types de nombres au lieu d'Integers, afin que vous puissiez également vérifier

VarType returns the type of the variant variable. Please note: There are also other number types instead of integers, so you can also check for "if (VarType(v) in [varinteger, varsmallint, varshortint, varbyte, varsingle, vardouble, varword, varlongword, varint64, varqword]) then begin..." ou une autre liste de types pour assurer que vous ne manquez aucun type de numéro.
30/11/2022 à 10:58

RépondrePositif Négatif
11 Vote

Peut-être que mon chemin est un peu incommode, mais il devrait couvrir tous les cas possibles (par exemple le cas que le type de Variant n'est pas un Integer).

var
  v: variant;
  i: integer;
begin
  v := 1;
   
  i := StrToIntDef(Trim(VarToStr(v)), 0);
end; 

Dans ce code, d'abord, nous convertissons la variable Variant en une String à l'aide de VarToStr, puis, nous supprimons le whitespace  (espaces, sauts de ligne et ainsi de suite) de la String en utilisant la fonction Trim et après cela, nous utilisons StrToIntDef pour essayer de convertir le String dans un Integer.

Le deuxième paramètre de StrToIntDef (ici 0) est la valeur par défaut. Cette valeur est renvoyée s'il n'est pas possible de convertir la chaîne (string) passée en un entier (integer).
01/12/2022 à 18:01

RépondrePositif Négatif
Répondre

Sujets Connexes

Avis Important

Veuillez noter: Les contributions publiées sur askingbox.com sont des contributions d’utilisateurs et ne doivent pas remplacer les conseils d’un professionnel. Ils ne sont pas vérifiés par des indépendants et ne reflètent pas nécessairement l’opinion de askingbox.com. Apprendre encore plus.

Participer

Posez votre propre question ou écrivez votre propre article sur askingbox.com. Voici comment.