StrToFloat und Ländercode Einstellung (, und .) ?
-
Hallo
Ich möchte feststehende Strings z.B. "0.23" in eine Zahl konvertieren.
StrToFloat gibt aber eine Fehlermeldung, wenn der falsche Ländercode eingestellt ist (, oder .)
Wie kann ich das lösen, da ich ja nicht weiß, was ein anderer auf seinem System eingestelllt hat ?
Oder sehe ich da etwas falsch ?Danke
-
Vor StrToFloat im String nach dem DecimalSeparator und diesen durch . ersetzen.
Siehe in der Hilfe nach "Formatvariablen für Währungs- und Datums-/Zeitangaben"
-
strtol() ignoriert das zum Glück (zumindest unter Windows).
-
Christian211 schrieb:
Vor StrToFloat im String nach dem DecimalSeparator und diesen durch . ersetzen.
Siehe in der Hilfe nach "Formatvariablen für Währungs- und Datums-/Zeitangaben"
kann man damit feststellen, was irgendjemand auf seinem System eingestellt hat ?
-
ok, hab es gefunden. Danke !
Hatte geschrieben bevor ich gelesen hatte
werde also vornweg den DecimalSeparato ermitteln, gegebenenfalls ändern und dann wieder zurücksetzen. Was für'n Aufwand
Aber ist kein großer Akt 
-
Du sollst ihn nicht ändern! Wenn überhaupt, dann tausche das Zeug im String direkt aus, wie von Christian211 vorgeschlagen.
-
Du sollst ihn nicht ändern! Wenn überhaupt, dann tausche das Zeug im String direkt aus, wie von Christian211 vorgeschlagen.
funktioniert aber wunderbar ! ich setzte ihn ja wieder zurück. und was heißt 'Wenn überhaupt' soll ich es sein lassen mit float zu arbeiten ? lol.
Dann müßte ich erst den DecimalSeparato abfragen und dann den string dementsprechen ändern und das bei jedem string (sind nähmlich einige). warum diesen Aufwand ?
Der string ist immer mit '.' also geht das Ändern und das Zurücksetzen des DecimalSeparato viel schneller. 1 mal ändern und einmal zurücksetzen. Spar ich mir ein Haufen Schreibarbeit, als wenn ich da 10 -20 mal die strings ändere und dann beim zurückschreiben der selben Aufwand nochmal betreiben muß.char old_DS = DecimalSeparator; DecimalSeparator = '.'; ... ... ... ... ... DecimalSeparator = old_DS;Wo ist da das Problem ? Was sollte da passieren ?
-
Du verstellst eine systemweite Einstellung. Das sollte die Alarmglocken schon laut werden lassen. Deine Einstellung ist genau der Grund, warum die meiste Software für Windows zum Wegschmeißen ist. Es geht hier nicht darum, dass du etwas nicht kannst, sondern um deine Einstellung.
-
DecimalSeparator wirkt nicht systemweit da es eine Konstante aus SysUtils ist. Die Windowseinstellungen bleiben also unbeeinflußt.
Für sowas bräuchte man SetLocaleInfo().
-
Ok. Mein Fehler.
Trotzdem scheußlich, weil nicht thread-safe.