Hallo
ähnlich wie in vielen im Delphi Forum angeführten Bsp, formatiere ich seit Jahren Variablen des Typs Double aus Interbase.
Mit der von Ernesto angeführten Routine passiert bei mir folgendes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button1Click(Sender: TObject); var
d: double; str: String; begin d := StrToFloat(Edit1.Text); str := Format('%4.2f', [d]); Edit1.Text := str; end; |
Edit1 = 1,765 Formatierter Wert = 1,76 !!!!!!!!!!!!
Edit1 = 10,765 Formatierter Wert = 10,77
Allerdings habe ich mich darauf verlassen, dass der Wert 1,77 sein sollte...
Gleiches passiert aber auch bei der "normalen" FormatFloat Routine
Delphi-Quelltext
1: 2: 3: 4: 5:
| var d : double; s : String;
d := 1,765; s:= formatFloat('###,##0.00', d); |
s hat den Wert '1,76' statt '1,77'
Ebenso wird bei 4,765 oder bei 5,765 oder der bei 6,765 und bei 7,765 auf x,76 gerundet.
Bei allen anderen Zahlen ob 0, 2,3,8,9,10,11,12,13 ..... erscheint der Wert xx,77
Die Routine ROUND funkt bei Double nicht und eigentlich handelt es sich "lediglich" um eine Aufsummierung von DB-Feldern!
Gibt es dafür eine noch logische Erklärung ??
Suche nun schon seit Tagen nach irgendwelchen Auswegen !
Hinweis:
Nehme ich statt '###,##0.00' den in Windows gespeicherten Kommawert und formatiere '###.##0,00' erhalte ich natürlich (als Zeichen, dass noch
irgendetwas normal funktioniert) die Fehlermeldung, dass der zu formatierende Wert KEIN Gleitkommawert ist !
10.000 Dank (ohne Komma) für Deine/Eure Hilfe !!
Gerald
PS Arbeite noch mit Delphi 2 C/S
Moderiert von
Gausi: Delphi-Tags hinzugefügt