Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Falscher Wert - kaufmännisches Runden (https://www.delphipraxis.net/160353-falscher-wert-kaufmaennisches-runden.html)

handson 9. Mai 2011 15:13

Falscher Wert - kaufmännisches Runden
 
Hallo!

Ich habe ein Problem mit dem käufmannischen Runden.Dazu habe ich mir die hier von shima gepostete Funktion benutzt.
Soweit so gut.

Jetzt ist ein weiteres Problem aufgetreten. Wenn ich folgende Formel berechnen lasse:

Betrag * UstSatz / (100 * UstSatz)

52,83 * 20 / (100 * 20) = 8,805 (kaufm. gerundet = 8,81)

Lasse ich es mit der besagten Funktion Runden (RoundX) kommt da 8,80 heraus.
Habe die Funktion mal zerlegt und stelle fest, dass er bei der int. Funktion Frac bei 880,5 (Wert * 100 wg. 2 Stellen nach dem Komma) statt 0,5 0,4999999999997... ausgibt. Das mal 2 ergibt keine 1. Und somit rundet er bei 5 nicht auf.

Das witzige ist, bei anderen Teilen meines Programms macht er es richtig. Wie ist denn sowas zu erklären?

Danke, für die Tipps!

Stephan

Sir Rufo 9. Mai 2011 15:25

AW: Falscher Wert - kaufmännisches Runden
 
Ich vermute mal, du benutzt nicht Currency ;) das wäre der richtige DatenTyp für deine Berechnung.
Die anderen haben aufgrund des Fließkommas diese Ungenauigkeiten.

implementation 9. Mai 2011 15:34

AW: Falscher Wert - kaufmännisches Runden
 
Bei den Fließkommadatentypen Single, Double und Extended kommen häufig Ungenauigkeiten zustande.
Für sowas solltest du einen Festkommadatentyp nehmen: Currency.

Uwe Raabe 9. Mai 2011 18:29

AW: Falscher Wert - kaufmännisches Runden
 
Mal abgesehen davon, daß bei deiner Aufgabe 0.53 rauskommt (man sollte das * im Nenner durch ein + ersetzen!), kommt bei mir gleich das Richtige raus. trotzdem plädiere ich in diesem Fall auch für Currency.

handson 10. Mai 2011 10:04

AW: Falscher Wert - kaufmännisches Runden
 
@Uwe: Stimmt... da war wieder der Finger schneller als das Gehirn.:)

Ja, ich habe das jetzt auf Currency umgestellt und siehe da: Es läuft!

Danke!

Stephan


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:51 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