Der 'DecimalSeparator' aus den SysUtils ist eine Kopie der spezifischen Ländereinstellungen.
Die implizite Typumwandlung des VariantManagers geht über die Windows API. Ich fürchte, es führt kein Weg dran vorbei, die regionalen Einstellungen zu ändern.
Ich würde auch auf so eine implizite Typumwandlung verzichten, wenn ich Du wäre. Ich habe z.B. eine Funktionssammlung, um Variants explizit in die diversen Typen umzuwandeln (VarToBool, VarToStr, VarToInt etc.) Einige Funktionen sind schon vorhanden, andere musste ich mir selbst basteln.
Erst damit kann ich vernünftig mit Variants arbeiten. Vorher hatte ich ständig AVs 'Cannot convert (Null) to String' etc.
Die explizite Konvertierung bedingt auch eine entsprechend kontrollierte Formatierung. Schließlich willst Du ja nicht Dezimalstellen bis der Arzt kommt, oder?
Vielleicht wäre es doch an der zeit, die 100000 Codezeilen zu durchforsten und entsprechend umzustellen.
[edit]
Ich muss mich korrigieren. Offensichtlich geht die Konvertierung nur bei den Typen varCurrency und varDateTime über die Windows-Formatierungsfunktionen.
Die Anweisung:
Delphi-Quelltext
Setzt den 'varType' auf 'varCurrency' und führt zu dem von Dir beobachteten Blödsinn.
Dagegen funktioniert das hier wie erwartet;
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| Var MyDouble : Double;
Begin MyDouble := 1.23; MyVariant := MyDouble; ... |
[/edit]
Na denn, dann. Bis dann, denn.