var
aStr:
String;
ba_entry: TStringList;
dValue, dBalance: Real;
fmtSettings: TFormatSettings;
begin
[...]
Datei einlesen, Zeile zerlegen, Werte entsprechend
in ba_entry haben. Debugger ergibt folgende Werte:
ba_entry.Strings[6]='
12,34';
ba_entry.Strings[7]='
12.345,67';
1) Variante:
GetFormatSettings(LOCALE_SYSTEM_DEFAULT, fmtSettings);
// Format setzen.
fmtSettings.DecimalSeparator:='
,';
fmtSettings.ThousandSeparator:='
.';
// Werte Wandeln.
dValue:=StrToFloat(ba_entry.Strings[6], fmtSettings); <- Liefert wie erwartet 12.34 zurück.
dBalance:=StrToFloat(ba_entry.Strings[7], fmtSettings); <- Hier gibts eine
Exception "Kein gültiger Gleitkommawert"...
2) Variante:
GetFormatSettings(LOCALE_SYSTEM_DEFAULT, fmtSettings);
// Format setzen.
fmtSettings.DecimalSeparator:='
,';
fmtSettings.ThousandSeparator:='
.';
// Werte Wandeln.
dValue:=StrToFloat(StringReplace(ba_entry.Strings[6], fmtSettings.ThousandSeparator, '
', [rfReplaceAll]), fmtSettings); <- Liefert 12.34 zurück.
dBalance:=StrToFloat(StringReplace(ba_entry.Srings[7], fmtSettings.ThousandSeparator, '
', [rfReplaceAll]), fmtSettings); <- Liefert 0 Zurück (Keine
Exception)!
3) Variante
GetFormatSettings(LOCALE_SYSTEM_DEFAULT, fmtSettings);
// Format setzen.
fmtSettings.DecimalSeparator:='
,';
fmtSettings.ThousandSeparator:='
.';
// Werte Wandeln.
aStr:=StingReplace(ba_entry.Strings[6], fmtSettings.ThousandSeparator, '
', [rfReplaceAll]);
dValue:=StrToFloat(aStr); <- Liefert 12.34 zurück.
aStr:=StingReplace(ba_entry.Strings[7], fmtSettings.ThousandSeparator, '
', [rfReplaceAll]);
dBalance:=StrToFloat(aStr); <- Liefert 0 Zurück (Keine
Exception)!
Dann hab ich mir gedacht, okay, scheint irgendwas mit der Stringverwaltung zu sein... Also:
4) Variante:
GetFormatSettings(LOCALE_SYSTEM_DEFAULT, fmtSettings);
// Format setzen.
fmtSettings.DecimalSeparator:='
,';
// Werte Wandeln.
dBalance:=StrToFloat('
12345,67');
// Alternative: dBalance:=StrToFloat('12345,67', fmtSettings);
^ Diese beiden Versuche liefern ebenfalls den Wert 0 zurück... Und ich weiss nicht warum...
[...]
end;