![]() |
Komma/Punkt Dezimalseperator
Hi. Habe ein Programm geschreiben, das beim Starten aus einer INI-Datei Werte einliest (z.B. 1,50) und dann mit "StrToFloat" umwandelt.
Das läuft soweit alles super aber nun habe ich as Programm bei einem Freund ausprobiert (anderer Rechner) und da kommen beim Starten Fehlermeldungen. "... ist kein gültiger Gleitkommawert" Also ich hab da sowas in meiner Erinnerung, dass man im Windows den Dezimalseperator umstellen kann. Wie kann ich dieses Problem aber nun lösen? Kann diese Umstellung über eine Funktion realisieren? |
Re: Komma/Punkt Dezimalseperator
|
Re: Komma/Punkt Dezimalseperator
Das kenn ich schon, damit kann ich das ja nur einmal umstellen, und dann läuft es ja auf meinem Rechner nicht mehr, da ich ja dann den Wert den ich einlese in einen in 2.50 Umwandeln müsste.
|
Re: Komma/Punkt Dezimalseperator
Hi,
also kein Problem, da du ihn ja auch auslesen
Delphi-Quellcode:
und darauf reagieren kannst. (pos, replace)
ShowMessage(decimalseparator);
MJ |
Re: Komma/Punkt Dezimalseperator
Hallo,
Wenn ich mich recht erinnere, könntest auch die StrToFloat nehmen, in der du die FormatSettings mit angibst. So kannst du angeben, welcher DecimalSeparator verwendet wird. Dies sollte dann unabhängig von den Windoseinstellungen sein. mfg Leonard |
Re: Komma/Punkt Dezimalseperator
Kann ich denn irgendwie die Einstellungen bei Regions- und Sprachoptionen nur für mein Programm ändern. Geht das überhaupt???
|
Re: Komma/Punkt Dezimalseperator
ich mach das immer so:
- das StrToFloat in einen try..except reinsetzen - bei except dann den DecimalSeperator umstellen (vorher den alten Wert merken) - dann nochmal StrToFloat - dann den DezimalSeperator wieder zurückstellen |
Re: Komma/Punkt Dezimalseperator
Eleganter ist es, sich die aktuellen Landeseinstellungen in ein Formattemplate zu holen und die dann für die neuere Variante von StrToFloat zu verwenden:
Delphi-Quellcode:
EDIT:
uses SysUtils;
... var fs :TFormatSettings; MeinString :String; MeineZahl :Double; ... begin ... GetLocaleFormatSettings(GetUserDefaultLCID, fs); MeineZahl:=StrToFloat(MeinString, fs); ... Nachtrag: Natürlich ist es so auch möglich, Zahlen die immer im gleichen Format vorliegen, unabhängig von den aktuellen Einstellungen des Rechners umzuwandeln. Dafür gibt man einfach bei GetLocaleFormatSettings seine eigene LCID an. Die kann man ja einfach per GetUserDefaultLCID ermitteln :) EDIT: Nachtrag 2: Ich hoffe, die Erklärung ist jetzt nicht allzu wirr. Für die Anwendung "wandle eine beliebige eingegebene Kommazahl so um wie der User es erwartet" gilt meine obige Version, für die Aufgabe "wandle Zahlen aus einem Datenfile unabhängig von der Ländereinstellung des Rechners" gilt die Empfehlung aus Nachtrag 1 :) |
Re: Komma/Punkt Dezimalseperator
Hallo,
Zitat:
Delphi-Quellcode:
zwischen die beiden Zeilen setzen, sonst nimmt er wieder nur die Windowseinstellungen.
fs.DecimalSeparator := ',';
|
Re: Komma/Punkt Dezimalseperator
Leonard, lies bitte die beiden Nachträge in meinem Post :)
Und umstellen braucht man für diese Aufgabe ansonsten auch nix :) Man muss sich halt nur das Formattemplate holen was zu den zu wandelnden Daten passt: User gibt Zahl ein wie gewohnt:
Delphi-Quellcode:
Programm benutzt ein Datenfile mit Kommazahlen im Format für ein bestimmtes Land:
GetLocaleFormatSettings(GetUserDefaultLCID, fs); //berücksichtigt Komma- und Tausendertrennzeichen wie der User es auf seinem Rechner gewohnt ist
Delphi-Quellcode:
Nun klarer? :)
GetLocaleFormatSettings(1033, fs); //holt zum Beispiel das Template für Deutschland
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 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 by Thomas Breitkreuz