AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Falscher Wert - kaufmännisches Runden

Ein Thema von handson · begonnen am 9. Mai 2011 · letzter Beitrag vom 10. Mai 2011
Antwort Antwort
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#1

Falscher Wert - kaufmännisches Runden

  Alt 9. Mai 2011, 15:13
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
Stephan Faust
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Falscher Wert - kaufmännisches Runden

  Alt 9. Mai 2011, 15:25
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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Falscher Wert - kaufmännisches Runden

  Alt 9. Mai 2011, 15:34
Bei den Fließkommadatentypen Single, Double und Extended kommen häufig Ungenauigkeiten zustande.
Für sowas solltest du einen Festkommadatentyp nehmen: Currency.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.021 Beiträge
 
Delphi 12 Athens
 
#4

AW: Falscher Wert - kaufmännisches Runden

  Alt 9. Mai 2011, 18:29
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
handson

Registriert seit: 18. Jan 2007
Ort: Delmenhorst
113 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Falscher Wert - kaufmännisches Runden

  Alt 10. Mai 2011, 10:04
@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
Stephan Faust
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 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