Rein von der Lösungsmöglichkeit her würde ich es auch so machen. Statt
StringReplace
würde ich allerdings direkt
FloatStr[DelimPos] := '.'
setzen, also den Parameter als
var
übergeben. So sparst du dir das Rumkopieren im Speicher. Mehrere Vorkommen des Dezimalseparators innerhalb eines einzelnen Wertes sind ja eh nicht zulässig, weshalb
StringReplace
mit
rfReplaceAll
auch Overkill sein sollte.
Delphi-Quellcode:
function ChangeLocalFloatStr(var FloatStr: String): String;
var
I: Integer;
begin
I := Pos(',', FloatStr);
if (I > 0) then
begin
FloatStr[I] := TFormatSettings.Invariant.DecimalSeparator;
end;
end;
Die ganzen zusätzlichen Variablen würde ich mir auch sparen. Achso, dann musst du den
StrToFloat
Aufruf natürlich abändern in
StrToFloat(FloatStr, TFormatSettings.Invariant)
.
Alternativ alles ganz kompakt (dann sparst du dir beim Aufrufen die zusätzliche Variable):
Delphi-Quellcode:
function LocalStrToFloat(FloatStr: String): Double;
var
I: Integer;
begin
I := Pos(',', FloatStr);
if (I > 0) then
begin
FloatStr[I] := TFormatSettings.Invariant.DecimalSeparator;
end;
Result := StrToFloat(FloatStr, TFormatSettings.Invariant);
end;