22 Votos

Delphi/Lazarus: Convertir Variable Variant a Integer

Pregunta de Invitado | 29/11/2022 a las 17:38

Tengo un valor del tipo Variant, pero necesito el tipo Integer en mi programa para poder calcular con el valor.

En términos concretos, se trata de una función que requiere un número Integer. Tan pronto como paso el valor Variant a esta función, el compilador crea un mensaje de error.

¿Cómo es posible convertir o traducir un valor del tipo Variant en un valor del tipo Integer?

ResponderPositivoNegativoFechaVotos
2Mejor Respuesta2 Votos

La forma más fácil es definir una variable Integer y establecer esta variable al valor de la variable Variant:

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

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

Esto es incluso posible en el caso de que el valor Variant realmente es del tipo String (cadena).

Si de todos modos desea verificar el tipo antes, puede usar la función VarType para eso:

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

VarType devuelve el tipo del variable Variant. Tenga en cuenta: Hay también otros tipos de números en lugar de Integers, por lo que también puede verificar "if (VarType(v) in [varinteger, varsmallint, varshortint, varbyte, varsingle, vardouble, varword, varlongword, varint64, varqword]) then begin..." u otra lista de tipos para asegurarse de que no se pierda ningún tipo de número.
30/11/2022 a las 10:23

ResponderPositivo Negativo
11 Voto

Quizás mi manera es un poco inconveniente, pero debería cubrir todos los casos posibles (por ejemplo, el caso de que el tipo de Variant no es un Integer).

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

En este código, primero, convertimos la variable Variant en una String usando VarToStr, luego, eliminamos el whitespace (espacios, saltops de línea y así sucesivamente) de la String usando la función Trim y después de eso usamos StrToIntDef para intentar convertir el String en un Integer.

El segundo parámetro de StrToIntDef (aquí 0) es el valor predeterminado. Este valor se devuelve si no es posible convertir la cadena (string) pasada en un entero (integer).
01/12/2022 a las 17:03

ResponderPositivo Negativo
Responder

Temas Relacionados

Aviso Importante

Por favor tenga en cuenta: Las contribuciones publicadas en askingbox.com son contribuciones de los usuarios y no deben reemplazar el asesoramiento profesional. No son verificados por independientes y no reflejan necesariamente la opinión de askingbox.com. Aprende más.

Participar

Haga su propia pregunta o escriba su propio artículo en askingbox.com. He aquí cómo.