Hallo, was ist hier verkehrt?
var
Wert: Single;
Ich bin dabei eine Routine nach Linux zu übertragen. Unter Windows ist es kein Problem folgendes zu nutzen:
(var Wert: Single;)
Wert := StrToFloatDef(Edit.Text, 0);
an anderer Stelle dann:
String2 := Format('%1.2f',[Wert]);
Funktioniert tadellos unter Windows. Bei Linux jedoch erhalte ich als String2 einen Leerstring, aber auch keinerlei Fehlermeldung. Was bedeutet das? Ist da Linux irgend wie anders)
Jürgen
'Format' funktioniert nicht
- photor
- Beiträge: 512
- Registriert: Mo 24. Jan 2011, 21:38
- OS, Lazarus, FPC: Arch Linux: L 3.2 (Gtk2) FPC 3.2.2
- CPU-Target: 64Bit
Re: 'Format' funktioniert nicht
sieht komisch aus. Ich kann mich irren, aber sollte die erste Zahl im Format-String nicht größer als die zweite sein (weil die die Länge des ganzen Strings angibt? Also eher so
Code: Alles auswählen
String2 := Format('%12.2f',[Werte]);
Ciao,
Photor
Re: 'Format' funktioniert nicht
photor hat geschrieben: Mo 20. Feb 2023, 15:37sieht komisch aus. Ich kann mich irren, aber sollte die erste Zahl im Format-String nicht größer als die zweite sein (weil die die Länge des ganzen Strings angibt? Also eher soAlso so funktioniert es bei mir zumindest.Code: Alles auswählen
String2 := Format('%12.2f',[Werte]);
Danke, aber ich habe weiter geforscht und bin darauf gestoßen das es bei Eingaben mit(!) Komma nicht funktioniert.
Also 100 funktioniert, aber 100,50 funktioniert nicht. Da es sich hier um Geldbeträge handelt wäre das Komma nicht nur richtig sondern auch so gewünscht bei der Eingabe.
Aber: 100.50 das funktioniert! Wenn ich also den String zerlege, das Komma durch den Punkt ersetze, klappt dann auch das 'Format'. Bei einer späteren Ausgabe dann wieder Punkt durch Komma ersetzt, dann alles ok.
Aber muss der Aufwand denn wirklich so sein?
Jürgen
Übrigens, die 1. Angabe im Format-String bestimmt die Mindestlänge. Also mindestens so lang wie angegeben, oder halt länger aber nicht kleiner. . .
-
- Beiträge: 38
- Registriert: Sa 1. Okt 2022, 05:27
- OS, Lazarus, FPC: Win10 pro (Laz 3.2 / FPC 3.2.2)
- CPU-Target: Win 64Bit
- Wohnort: CH
Re: 'Format' funktioniert nicht
Hallo Justuv
Lass Dir mal den DefaultFormatSettings.DecimalSeparator in Windows und Linux anzeigen. Wichtig kann bei Zahlen da dann auch noch der DefaultFormatSettings.ThousandSeparator werden. Am besten diese zwei Werte mal in einem Label anzeigen lassen.
Lass Dir mal den DefaultFormatSettings.DecimalSeparator in Windows und Linux anzeigen. Wichtig kann bei Zahlen da dann auch noch der DefaultFormatSettings.ThousandSeparator werden. Am besten diese zwei Werte mal in einem Label anzeigen lassen.
Erfahrung heißt gar nichts. Man kann eine Sache auch 35 Jahre schlecht machen.
Re: 'Format' funktioniert nicht
Danke, der Hinweis war der Richtige. Geholfen hat nun das Einbinden von 'Clocale'.dj_leinad hat geschrieben: Mo 20. Feb 2023, 19:17 Hallo Justuv
Lass Dir mal den DefaultFormatSettings.DecimalSeparator in Windows und Linux anzeigen. Wichtig kann bei Zahlen da dann auch noch der DefaultFormatSettings.ThousandSeparator werden. Am besten diese zwei Werte mal in einem Label anzeigen lassen.
Gruß Jürgen
Re: 'Format' funktioniert nicht
Zur Klarstellung: Die erste Zahl in z.B. '%15.3f' ist die gesamte Mindestlänge des Ergebnisstrings, die zweite die Anzahl der Dezimalstellen. In dem Beispiel '%15.3f' werden z.B. bei der Zahl 1.2 von dem 15 erlaubten Zeichen drei für die Dezimalstellen und eine für den Dezimaltrenner benötigt; es bleiben 11 freie Zeichen, die vor dem eigentlichen String mit Leerzeichen gefüllt werden, so dass der Text rechtsbündig formatiert wird. Das mag für eine Konsolen-Ausgabe mit einer Schriftart fester Zeichenbreite sinnvoll sein, bewirkt aber auf Formularen mit Proportionalschriftarten und - per Default - linksbündiger Ausgabe ein sehr unruhiges Erscheinungsbild (weil alle Zeichen unterschiedlich breit sind). Daher ist es sinnvoll, in der Regel die erste Zahl in der Formatangabe auf 0 zu setzen ('%0.3f') oder gleich ganz wegzulassen ('%.3f'). Damit werden keine Leerzeichen vorangestellt.Justuv hat geschrieben: Mo 20. Feb 2023, 16:17 die 1. Angabe im Format-String bestimmt die Mindestlänge. Also mindestens so lang wie angegeben, oder halt länger aber nicht kleiner. . .