Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Formatfehler (https://www.delphipraxis.net/162319-formatfehler.html)

khh 17. Aug 2011 09:59

Formatfehler
 
hallo zusammen,
mit
bruttopreis := RoundCurrency(bruttopreis,0)

runde ich eine berechneten Preis.
das funktioniert soweit, bis auf Ausnahmen in denen sich 4 Nachkommastellen ergeben und in bruttopreis stehen z.B. 21,9999 .

Formatiere ich den currency-wert mittels:

preisbruttoEdit.text := Format('%5.2f ', [bruttopreis]);

erhalter ich ein Ergebnis welches nicht weiter verwenden kann:

21,:0

Was kann ich machen?

danke gruss KHH

ibp 17. Aug 2011 10:07

AW: Formatfehler
 
ist doch richtig wenn du auf die 2. Nachkommastelle rundest wird aus 0,999 > 1,00. Es gibt ja noch das kaufmännische Runden um die Rundungsdifferenzen zu minimieren.

DeddyH 17. Aug 2011 10:20

AW: Formatfehler
 
Mein Delphi XE liefert bei
Delphi-Quellcode:
Format('%5.2f', [21.9999])
22,00, also völlig korrekt. Möglicherweise ein Bug in Lazarus? Klappt es, wenn Du die Länge weglässt und nur die Precision nimmst (%.2f)?

khh 17. Aug 2011 10:46

AW: Formatfehler
 
das Problem waren _mehr_ als 4 Nachkommastellen, die _korrekt_ auf eben diese 4 Nachkommastellen gerundet wurden.

ich hab diese jetzt auf 4 Nachkommastellen begrenzt, damit funktionierts korrekt


ich danke euch

Gruss KHH

gammatester 17. Aug 2011 11:11

AW: Formatfehler
 
Das Problem ist auch nicht, ob 21 oder 22, sondern das ":"-Zeichen in den Ausgaben. Da ":" = "9"+1 ist, sieht es nach einer mißglückten Optimierung aus (Arithmetik auf Strings).

Es ist auch weder ein eigentliches Lazurus- noch Format-Problem, sondern tritt auch schon bei writeln(bruttopreis:5:2); auf nur mit "." statt ",".

khh 17. Aug 2011 11:30

AW: Formatfehler
 
Zitat:

Zitat von gammatester (Beitrag 1117483)
Das Problem ist auch nicht, ob 21 oder 22, sondern das ":"-Zeichen in den Ausgaben. Da ":" = "9"+1 ist, sieht es nach einer mißglückten Optimierung aus (Arithmetik auf Strings).

Es ist auch weder ein eigentliches Lazurus- noch Format-Problem, sondern tritt auch schon bei writeln(bruttopreis:5:2); auf nur mit "." statt ",".

und wo liegt nun genau die Ursache ?
ich denke als Lösung Nachkommastellen zu kürzen ist ja nicht das Gelbe vom Ei :-(

gammatester 17. Aug 2011 11:40

AW: Formatfehler
 
Zitat:

Zitat von khh (Beitrag 1117489)
und wo liegt nun genau die Ursache ?
ich denke als Lösung Nachkommastellen zu kürzen ist ja nicht das Gelbe vom Ei :-(

Zur die Ursache: Bin ich FPC-Entwickler? Notfalls haben doch alle Lazurus-Benutzer den FPC-Quellcode:wink:

Ein Workaround wäre: Rechne weiter mit Currency und bei der Ausgabe nimm
Delphi-Quellcode:
Format('%10.2f ', [extended(bruttopreis)]); //oder
Format('%10.2f ', [double(bruttopreis)]);

khh 17. Aug 2011 12:01

AW: Formatfehler
 
ok, ich danke euch

gruss kh

himitsu 17. Aug 2011 12:32

AW: Formatfehler
 
Zitat:

Zitat von gammatester (Beitrag 1117483)
Das Problem ist auch nicht, ob 21 oder 22, sondern das ":"-Zeichen in den Ausgaben. Da ":" = "9"+1 ist, sieht es nach einer mißglückten Optimierung aus (Arithmetik auf Strings).

Das ist dann wohl definitiv ein Bug und das sollte man dann mal im entsprechenden Lazarusforum oder Bugtracker (gibt doch bestimmt sowas) gemeldet werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz