Zitat:
Delphi-Quellcode:
fs.DecimalSeparator := ',';
fs.ThousandSeparator := ',';
...
fs.DecimalSeparator := '.';
fs.ThousandSeparator := '.';
Beide Zeichen gleich, das kann nicht funktionieren.
Da sich sowas nicht ändert und man das öfters gebraucht...
Delphi-Quellcode:
// global bzw. zentral
var
FSUS, FSDE: TFormatSettings;
// Init
{
FSUS := FormatSettings;
FSUS.DecimalSeparator := '.';
FSUS.ThousandSeparator := ',';
FSDE := FormatSettings;
FSDE.DecimalSeparator := ',';
FSDE.ThousandSeparator := '.';
}
FSUS := TFormatSettings.Create('en-US'); // oder TFormatSettings.Create($0409);
FSDE := TFormatSettings.Create('de-DE'); // oder TFormatSettings.Create($0407);
Dann fliegt erstmal die ständige Definition raus
Delphi-Quellcode:
function MyStrToFloat(const AString: string): double;
var
x: Double;
begin
x := NaN;
if not TryStrToFloat(AString, x, FSUS) then begin
if not TryStrToFloat(AString, x, FSDE) then
x := NaN;
end;
if IsNaN(x) then
Result := 0
else
Result := x;
end;
und wenn man weiter Unnötiges entfernt, dann bleibt nicht mehr viel übrig
Delphi-Quellcode:
function MyStrToFloat(const AString: string): double;
begin
if not TryStrToFloat(AString, Result, FSUS) and not TryStrToFloat(AString, Result, FSDE) then
Result := 0;
end;
oder
Delphi-Quellcode:
function MyStrToFloat(const AString: string): double;
begin
if not TryStrToFloat(AString, Result, FSUS) then
Result := StrToFloatDef(AString, 0, FSDE);
end;