Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Komma/Punkt Dezimalseperator (https://www.delphipraxis.net/79347-komma-punkt-dezimalseperator.html)

DoktorD 20. Okt 2006 16:24


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?

Maja Jessica 20. Okt 2006 16:30

Re: Komma/Punkt Dezimalseperator
 
Hi

Hilft Dir dieses?:
Decimalseparator

MJ

DoktorD 20. Okt 2006 16:33

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.

Maja Jessica 20. Okt 2006 16:48

Re: Komma/Punkt Dezimalseperator
 
Hi,

also kein Problem, da du ihn ja auch auslesen
Delphi-Quellcode:
ShowMessage(decimalseparator);
und darauf reagieren kannst. (pos, replace)

MJ

Leonard 20. Okt 2006 16:56

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

DoktorD 20. Okt 2006 16:57

Re: Komma/Punkt Dezimalseperator
 
Kann ich denn irgendwie die Einstellungen bei Regions- und Sprachoptionen nur für mein Programm ändern. Geht das überhaupt???

RavenIV 20. Okt 2006 16:58

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

OldGrumpy 20. Okt 2006 17:01

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:
uses SysUtils;
...
var
  fs        :TFormatSettings;
  MeinString :String;
  MeineZahl :Double;
...
begin
...
  GetLocaleFormatSettings(GetUserDefaultLCID, fs);
  MeineZahl:=StrToFloat(MeinString, fs);
...
EDIT:
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 :)

Leonard 20. Okt 2006 17:05

Re: Komma/Punkt Dezimalseperator
 
Hallo,

Zitat:

Zitat von OldGrumpy
Delphi-Quellcode:
...
  GetLocaleFormatSettings(GetUserDefaultLCID, fs);
  MeineZahl:=StrToFloat(MeinString, fs);
...

Dann aber noch
Delphi-Quellcode:
  fs.DecimalSeparator := ',';
zwischen die beiden Zeilen setzen, sonst nimmt er wieder nur die Windowseinstellungen.

OldGrumpy 20. Okt 2006 17:06

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:
GetLocaleFormatSettings(GetUserDefaultLCID, fs); //berücksichtigt Komma- und Tausendertrennzeichen wie der User es auf seinem Rechner gewohnt ist
Programm benutzt ein Datenfile mit Kommazahlen im Format für ein bestimmtes Land:
Delphi-Quellcode:
GetLocaleFormatSettings(1033, fs); //holt zum Beispiel das Template für Deutschland
Nun klarer? :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.
Seite 1 von 3  1 23      

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