Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - FloatToString mit Punkt statt Komma
HenryHux - So 19.12.10 14:07
Titel: FloatToString mit Punkt statt Komma
Hi,
bei der Typumwandlung von Gleitkommazahlen zu Strings, werden nachkommazahlen ja übelicherweise duch ein , getrennt.
Krieg ich das auch einfach mit nem Punkt hin oder muss ich den String mühsam zerpflücken?
Lg
bummi - So 19.12.10 14:14
StringReplace('1234.234','.',DecimalSeparator,[])
delfiphan - So 19.12.10 14:19
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var InvariantSettings: TFormatSettings; begin InvariantSettings.DecimalSeparator := '.'; ... FloatToStr(0.5, InvariantSettings); |
Oder, wenn du's global ändern willst:
DecimalSeparator := '.';
Oder als erste Unit SetThreadLocale auf English (U.S.) setzen (
SetThreadLocale($0409);).
HenryHux - So 19.12.10 14:25
Danke!
Genau das, was ich suchte.
Lg
dummzeuch - So 19.12.10 20:07
delfiphan hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var InvariantSettings: TFormatSettings; begin InvariantSettings.DecimalSeparator := '.'; ... FloatToStr(0.5, InvariantSettings); |
|
Ahem: Ist das so sinnvoll? Eine nicht initialisierte (Record-)Variable, bei der nur ein einziges Feld gesetzt wird als Parameter uebergeben? Ich haette da zumindest versucht, die Variable mit den Systemeinstellungen vorzubelegen und erst dann das Feld DecimalSeparator zu aendern.
twm
delfiphan - Mo 20.12.10 00:52
Nein, natürlich nicht. Ich wollte nur andeuten, wie das zu tun ist. In der Praxis hätte man die Variable vielleicht in globalem Scope oder in einer Klasse und würde die anderen Felder auch definieren.
TheChicken - Di 25.10.11 09:41
Hallo,
ich habe gerade zum wiederholten Male das selbe Problem gehabt und immer irgendwie gelöst. Jedoch meine ich heute endlich mal eine "gute" Lösung gefunden zu haben. Dabei nutze ich ebenfalls die TFormatSettings-Variable, die ich aber vorher mit LOCALE_INVARIANT initialisiere.
Auszug aus der Microsoft Hilfe:
Zitat: |
For example, the invariant locale is used when an application compares character strings using the CompareString function and expects a consistent result regardless of the user locale. The settings of the invariant locale are similar to those for English (United States) but should not be used to display formatted data. |
Und genau das will man ja haben, wenn man z.B. einen SQL-String mit Float-Werten zusammenbauen will.
Also
Quelltext
1: 2: 3: 4: 5: 6: 7:
| function FloatToSQLString(Value: Extended): string; var FS: TFormatSettings; begin GetLocaleFormatSettings(LOCALE_INVARIANT, FS); Result := FloatToStr(Value, FS); end; |
Wenn auch ein wenig spät... ich hoffe, ich konnte helfen.
TheChicken
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!