Hallo
Also, ich schreibe gerade ein Programm, in dem oft der Typ Variant vorkommt.
Nun bin ich auf einen ganz merkwürdiges Verhalten gestossen, welches mir gar nicht passt.
Folgender Code löst eine Exception vom Typ EVariantOverflowError mit der Meldung "Overflow while converting variant of type (Double) into type (Integer)." aus.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var A, B: Variant; begin A := 0; B := 0; while (A < 100000) do begin Inc(A); B := B + A; end; ShowMessage(VarTypeAsText(VarType(B))); ShowMessage(IntToStr(B)); |
Das Resultat der Berechnung "B + A" ist vom Typ Double, sobald das Ergebnis keinen Platz mehr in einem Integer hat.
Wenn ich den Code nun wie folgt ändere (beachte die Berechnung):
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| ... while (A < 100000) do begin Inc(A); B := Integer(B) + Integer(A); end; ... |
Dann ist auch das Resultat zwingend ein Integer und der Fehler tritt nicht mehr auf.
Leider kann ich das in meinem Programm nicht so einfach lösen, weil die Typen unvorhersehbar sind.
Gibt es irgendeine Möglichkeit, das Verhalten der Variants zu beeinflussen? Ich weiss mir leider im Moment überhaupt nicht zu helfen...
Gruss und Danke
Breezen