22 Stimmen

Delphi/Lazarus: Variant-Wert in Integer umwandeln

Frage von Gast | Letztes Update am 02.12.2022 | Erstellt am 31.12.2014

Ich habe einen Wert vom Typ Variant, benötige aber in meinem Programm den Typen Integer, um mit dem Wert rechnen zu können.

Konkret geht es um eine Funktion, die eine Integer-Zahl erwartet. Sobald ich aber meinen Variant-Wert übergebe, spielt der Compiler nicht mehr mit und es gibt einen Fehler.

Wie ist es möglich, einen Wert vom Typen "Variant" in einen Integer-Wert umzurechnen oder zu konvertieren?

AntwortenPositivNegativDatumStimmen
2Beste Antwort2 Stimmen

Am einfachsten geht es, indem du einfach eine Integer-Variable deklarierst und diese auf deinen Variant-Wert setzt:

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

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

Das geht selbst dann, wenn der Variant-Wert eigentlich vom Typ String ist.

Wenn du dennoch den Typen vorher prüfen möchtest, kannst du auch die Funktion VarType benutzen:

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

VarType gibt den Typ der Variant-Variable zurück. Beachte aber: Es gibt auch andere Zahlen-Typen, du könntest also auch "if (VarType(v) in [varinteger, varsmallint, varshortint, varbyte, varsingle, vardouble, varword, varlongword, varint64, varqword]) then begin..." verwenden oder die Liste entsprechend erweitern oder verkürzen um keinen möglichen Zahlentyp zu übergehen.
Letztes Update am 02.12.2022 | Erstellt am 31.12.2014

AntwortenPositiv Negativ
11 Stimme

Vielleicht ein bisschen umständlicher ist diese Variante, dafür sollte sie aber auch alle Fälle abdecken (zum Beispiel wenn der Variant-Type kein Integer ist).

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

Hier wandeln wir die Variant-Variable zunächst mit VarToStr in einen String um, schneiden von diesem String mit Trim den Whitespace (Leerzeichen, Zeilenumbrüche) ab und benutzen anschließend StrToIntDef um zu versuchen, den String in einen Integer umzuwandeln.

Der zweite Parameter von StrToIntDef (hier 0), ist ein Default Wert. Dieser wird immer dann zurückgegeben, wenn aus dem String kein Integer zu machen ist.
31.12.2014 um 20:43

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Delphi: Systemweiter HotKey

Tutorial | 3 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.