![]() |
AW: StrToFloat -> Wahnsinn kurz bevorstehend!
Zitat:
MfG Fabian |
AW: StrToFloat -> Wahnsinn kurz bevorstehend!
Zitat:
Zitat:
|
AW: StrToFloat -> Wahnsinn kurz bevorstehend!
Da ältere Delphi-Versionen keine überladende Funktion für StrToFloat mit FormatSettings kennen, gibt es ja noch eine alte Variante mit Überschreiben des SysUtils.DecimalSeparator.
Delphi-Quellcode:
var
r : Real; s : String; OldDecimalSeparator : Char; begin // Wenn Separatoren lokalen Settings entsprechen s := '12.345,67'; s := StringReplace(s, SysUtils.ThousandSeparator, '', [rfReplaceAll]); r := StrToFloat(s); ShowMessage(Format('%.3f',[r])); // Wenn bekannte, aber evtl. von lokalen Einst. abweichende Separatoren s := '12,345.67'; OldDecimalSeparator := SysUtils.DecimalSeparator; SysUtils.DecimalSeparator := '.'; s := StringReplace(s, ',', '', [rfReplaceAll]); r := StrToFloat(s); SysUtils.DecimalSeparator := OldDecimalSeparator; ShowMessage(Format('%.3f',[r])); end; |
AW: StrToFloat -> Wahnsinn kurz bevorstehend!
Zitat:
Aber das macht er ja immer im 1. Post ;) MfG Fabian |
AW: StrToFloat -> Wahnsinn kurz bevorstehend!
Ähmmm...ich habe im Beitrag #6 eine Funktion gezeigt, die automatisch
den Dezimaltrenner korrigiert und den Tausendseparator entfernt. Hat sich das eigentlich mal jemand angeschaut? Also folgende Zahlen lassen sich damit umwandeln.
Delphi-Quellcode:
Was die Funktion natürlich nicht kann sind Zahlen, die nur einen
var
x : double; begin x := StrToFloat(MakeValidFloatString('3.14')); x := StrToFloat(MakeValidFloatString('3,14')); x := StrToFloat(MakeValidFloatString('1,000,000.5')); x := StrToFloat(MakeValidFloatString('8.000,0')); Tausendseparator enthalten, aber keinen Dezimaltrenner haben. Aber ein Mensch (ohne Zusatzinfo) würde daran auch scheitern: 2,005 - ist das jetzt 2005 oder 2+5/1000 ? |
AW: StrToFloat -> Wahnsinn kurz bevorstehend!
Zitat:
Mir persönlich fallen eher Situationen ein, bei denen die verwendeten Separatoren bekannt sind. Reele Zahlen ohne Nachkommastelle werden ja leider auch wie eine ganze Zahl gespeichert (wenn man keine mind. Nachkomma erzwingt). Das wird bei großen Zahlenkolonen sicher dann öfter vorkommen, genauso wie dann das Tausender-Trennzeichen mit gespeichert wird (wenn schon die unhandliche Form des Strings gewählt hat). |
AW: StrToFloat -> Wahnsinn kurz bevorstehend!
StrToFloat erwartet im umzuwandelnden String kein Tausender-Trennzeichen.
Das steht zwar nicht so ausdrücklich in der Hilfe, ist aber so! Man müsste also zunächst auf Tausender-Trennzeichen prüfen und diese Zeichen dann aus dem String löschen. |
AW: StrToFloat -> Wahnsinn kurz bevorstehend!
...die Tausender Trennzeichen werden sowohl im Ausgangspost, als auch bei den vielen Beispielen zuvor entfernt.
|
AW: StrToFloat -> Wahnsinn kurz bevorstehend!
Oh, da hatte ich nur zu oberflächlich drüber geschaut - Sorry !
Dann ist es wirklich merkwürdig. Vlt liegt der Fehler ja ganz woanders (Anforderung von Speicherplatz für die TStringList?). |
AW: StrToFloat -> Wahnsinn kurz bevorstehend!
Zitat:
Da versagen deine Unittests leider, weil sie diesen Fall anscheinend nicht abdecken. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz