Bug in TextToFloat oder FloatToStr?
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
Bug in TextToFloat oder FloatToStr?
Hi,
also ich frage mich seit längerem wieso ich Probleme mit Floats in Ini Dateien habe und bin zum Schluss gekommen, dass was mit dem DecimalSeperator in den Funktionen TextToFloat oder FloatToStr nicht stimmt. Denn er liest die Zahl 100,53 die ich mit ini.WriteFloat reinschreibe als 10053 heraus (ini.readFloat).
Da beide Proceduren auf den beiden genannten Funktionen beruhen muss es einen darin geben. Sehr wahrscheinlich wird einmal der DecimalSeperator richtig berücksichtigt und einmal nicht.
Hat da jemand eine Idee was es alternativ sein könnte?
Wenn nicht erstelle ich gerade einen Bugreport. EDIT: Ok, hier ist er: http://bugs.freepascal.org/view.php?id=12861" onclick="window.open(this.href);return false;
Gruß Alexander
also ich frage mich seit längerem wieso ich Probleme mit Floats in Ini Dateien habe und bin zum Schluss gekommen, dass was mit dem DecimalSeperator in den Funktionen TextToFloat oder FloatToStr nicht stimmt. Denn er liest die Zahl 100,53 die ich mit ini.WriteFloat reinschreibe als 10053 heraus (ini.readFloat).
Da beide Proceduren auf den beiden genannten Funktionen beruhen muss es einen darin geben. Sehr wahrscheinlich wird einmal der DecimalSeperator richtig berücksichtigt und einmal nicht.
Hat da jemand eine Idee was es alternativ sein könnte?
Wenn nicht erstelle ich gerade einen Bugreport. EDIT: Ok, hier ist er: http://bugs.freepascal.org/view.php?id=12861" onclick="window.open(this.href);return false;
Gruß Alexander
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Re: Bug in TextToFloat oder FloatToStr?
Hast dualexander hat geschrieben:also ich frage mich seit längerem wieso ich Probleme mit Floats in Ini Dateien habe und bin zum Schluss gekommen, dass was mit dem DecimalSeperator in den Funktionen TextToFloat oder FloatToStr nicht stimmt. Denn er liest die Zahl 100,53 die ich mit ini.WriteFloat reinschreibe als 10053 heraus (ini.readFloat).
Code: Alles auswählen
DecimalSeparator:=',';
Gruß, Euklid
PS:
Wie soll jemand hier derart schnell auf deine Frage reagieren können?Hat da jemand eine Idee was es alternativ sein könnte?
Wenn nicht erstelle ich gerade einen Bugreport. EDIT: Ok, hier ist er: http://bugs.freepascal.org/view.php?id=12861" onclick="window.open(this.href);return false;
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: Bug in TextToFloat oder FloatToStr?
Das sollte automatisch nach den Systemlocales passieren.gesetzt? Standardmäßig erkennt er nämlich einen Punkt als Dezimalseparator an.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 512
- Registriert: Mo 25. Aug 2008, 18:17
- OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
- CPU-Target: x86
- Wohnort: Chemnitz
Re: Bug in TextToFloat oder FloatToStr?
... was allerdings bei Dateiarbeit denkbar ungünstig ist. Einer speichert auf einem System, wo die Localesettings "," vorgeben und ein anderer will sie laden, hat aber "." eingestellt --> crash.Christian hat geschrieben:Das sollte automatisch nach den Systemlocales passieren.gesetzt? Standardmäßig erkennt er nämlich einen Punkt als Dezimalseparator an.
- af0815
- Lazarusforum e. V.
- Beiträge: 6855
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Bug in TextToFloat oder FloatToStr?
Genau deswegen kann man ja es ändern. Und diesen speziellen Sachen muß man als Programmierer ins Auge sehen und ganz einfach darauf reagieren.Hitman hat geschrieben:... was allerdings bei Dateiarbeit denkbar ungünstig ist. Einer speichert auf einem System, wo die Localesettings "," vorgeben und ein anderer will sie laden, hat aber "." eingestellt --> crash.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
Re: Bug in TextToFloat oder FloatToStr?
hmmm daran habe ich noch nicht gedacht ihn manuell zu ändern wenn ich in die ini schreibe und dann wieder zurücksetzte...
gute Idee mache ich.
jetzt klappt alles einwandtfrei (unter linux)
unter windows klappt das temporäre setzten von DecimalSeperator:='.' anscheinend nicht...
gute Idee mache ich.
jetzt klappt alles einwandtfrei (unter linux)
unter windows klappt das temporäre setzten von DecimalSeperator:='.' anscheinend nicht...
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Re: Bug in TextToFloat oder FloatToStr?
In deinem Fall musst du ja auch DecimalSeparator:=',' setzen. Schließlich ist die Zahl in dieser Art auch abgespeichert.alexander hat geschrieben:unter windows klappt das temporäre setzten von DecimalSeperator:='.' anscheinend nicht...
Wenn es nun klappt, dann ist das meiner Meinung nach aber kein so schlimmer Bug mehr.
Der FPC würde sich sicherlich dann korrekt verhalten, wenn es zu einer Exception kommen würde, wenn der Separator nicht passt, oder? Dann müsste der Bugreport entsprechend angepasst werden...
Viele Grüße, Euklid
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
Re: Bug in TextToFloat oder FloatToStr?
Aber ich will ja die Ini im englischen ZahlenFormat d.h. 0.686 abspeichern. Und dies auch wieder auslesen.Euklid hat geschrieben:In deinem Fall musst du ja auch DecimalSeparator:=',' setzen. Schließlich ist die Zahl in dieser Art auch abgespeichert.alexander hat geschrieben:unter windows klappt das temporäre setzten von DecimalSeperator:='.' anscheinend nicht...
D.h. ich setzte beim schreiben und lesen in und aus der INI den DecimalSeperator:='.' . In Linux klappt auch alles super. Nur in XP scheint er die zahlen falsch zu lesen...
hmmm und ich würde es ja gerne auf minor setzten aber ich finde keinen Edit button....
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
Re: Bug in TextToFloat oder FloatToStr?
ahhh ok ich muss nascheinend (naatürlich) auch den ThousandSeperator setzten damit es klappt. Wieso es in Linux ohne das setzten klappt und man es in XP braucht kapiere ich nicht.
Danke für eure Hilfe
Danke für eure Hilfe
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu
-
- Lazarusforum e. V.
- Beiträge: 2808
- Registriert: Fr 22. Sep 2006, 10:38
- OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
- Wohnort: Hessen
- Kontaktdaten:
Re: Bug in TextToFloat oder FloatToStr?
Wie gesagt: Wenn du den Bugreport noch anpasst, haben die FPC-Entwickler weniger Arbeit. Einen nicht vorhandenen Bug zu finden ist immer schwer.
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Bug in TextToFloat oder FloatToStr?
Auf linux soll mann unit "clocale" importieren um den RTL zu zwingen system locale data in sysutils zu laden. (2.2.2+)
Funktioniert genau so wie cthreads, und hat auch dieselbe Gründe.
Funktioniert genau so wie cthreads, und hat auch dieselbe Gründe.
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
Re: Bug in TextToFloat oder FloatToStr?
ok. Danke marcov. habe ich gemacht. Was bewirkt das genau?
Also nochmal zusammengefasst:
Damit in die ini IMMER in englischer Schreibweise geschrieben wird (damit sie sprachenunabhänig ist), setzte ich den DecimalSeperator und den ThousandSeperator temoprär:
Bevor readfloat oder writefloat mache ich folgende Befehle:und nach dem readfloat oder writefloat:
Hat jemand eine Elegantere Lösung?
Und "nicht vorhanden" verstehe ich bei deiner Aussage einfach nicht... EDIT: ahhh ok, aber müsste nicht korrekterweise, wenn man den DecimalSeperator nicht englisch setzt, sowohl deutsch geschrieben als auch gelesen werden? Wäre das nicht das korrekte Verhalten?
Aber wie es zurzeit ist, nämlich deutsch schreiben, und englisch lesen ist nicht sehr schön und führt wenn man es nicht weiß zu sehr seltsamen Fehlern, weil die Zahlen sich verändern...
Also nochmal zusammengefasst:
Damit in die ini IMMER in englischer Schreibweise geschrieben wird (damit sie sprachenunabhänig ist), setzte ich den DecimalSeperator und den ThousandSeperator temoprär:
Bevor readfloat oder writefloat mache ich folgende Befehle:
Code: Alles auswählen
tempDecimalSeperator:=DecimalSeparator;
tempThousandSeparator:=ThousandSeparator;
DecimalSeparator:='.'; // scheint man in linux nicht zu brauchen schaden aber nicht
ThousandSeparator:=','; // scheint man in linux nicht zu brauchen
Code: Alles auswählen
DecimalSeparator := tempDecimalSeperator;
ThousandSeparator := tempThousandSeparator;
hmmmm habe doch gesagt, dass ich keinen Edit Button finden kann. Kannst du etwa deine Bugs editieren?Euklid hat geschrieben:Wie gesagt: Wenn du den Bugreport noch anpasst, haben die FPC-Entwickler weniger Arbeit. Einen nicht vorhandenen Bug zu finden ist immer schwer.
Und "nicht vorhanden" verstehe ich bei deiner Aussage einfach nicht... EDIT: ahhh ok, aber müsste nicht korrekterweise, wenn man den DecimalSeperator nicht englisch setzt, sowohl deutsch geschrieben als auch gelesen werden? Wäre das nicht das korrekte Verhalten?
Aber wie es zurzeit ist, nämlich deutsch schreiben, und englisch lesen ist nicht sehr schön und führt wenn man es nicht weiß zu sehr seltsamen Fehlern, weil die Zahlen sich verändern...
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu
-
- Beiträge: 1102
- Registriert: Di 5. Aug 2008, 09:37
- OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
- CPU-Target: 32/64,PPC(+64), ARM
- Wohnort: Eindhoven (Niederlande)
Re: Bug in TextToFloat oder FloatToStr?
Ja. Definiere ein neues "TFormatSettings" record, und nuetze die D7+ functionen wo man das TFormatsettings record mitgeben kann:alexander hat geschrieben: Hat jemand eine Elegantere Lösung?
Code: Alles auswählen
var EnglishFormat: TFormatSettings;
begin
EnglishFormat:= DefaultFormatSettings; // kann nur unter FPC, nicht unter Delphi.
EnglishFormat.decimalseparator:='.'; // usw fuer andere settings.
// nuetzen zb:
if trystrtofloat(s,value,Englishformat) then // funktioniert auch fuer andere funktionen. ist aber 2.2.0+ und D7+, aber dass sollte nicht problematisch sein.
begin
// conversion ok ohne exceptions.
end;
end;
-
- Beiträge: 423
- Registriert: Di 5. Feb 2008, 12:45
- OS, Lazarus, FPC: Linux, Lazarus svn, FPC svn
- CPU-Target: 64Bit
- Kontaktdaten:
Re: Bug in TextToFloat oder FloatToStr?
probiere ich aus. danke
Du magst Freiheit? Gönne es auch deinem Computer mit Linux!
www.alexanderroth.eu
www.alexanderroth.eu