Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#23

Re: kaufmännisch auf 0,5 oder 1 runden

  Alt 26. Mai 2008, 08:16
So ist es allgemein:
Delphi-Quellcode:
Function RoundToGranularity(aValue, aGranularity: Double): Double;
Begin
  Result := Trunc(aValue / aGranularity + 0.5 + 1E-10) * aGranularity
End;
In deinem Fall ist 'aGranularity' = 0.50.

Die Ergebnisse sind zwar (weil Floating-Point) nicht genau, aber die Darstellungsfehler in der 15.ten Stelle sind irrelevant, weil Du ja formatiert ausgibst. Dafür kannst Du dann in Ruhe mit den Werten rechnen. Die Rundungsfehler schaukeln sich nur bei extremen Werten und/oder langen Iterationen langsam hoch.

Wichtig ist hier die formatierte Ausgabe auf eine Nachkommastelle, aber das sollte man ohnehin machen.
Zitat von grenzgaenger:
nicht umsonnst sollte man die floats vermeiden...
Äh.. nö. Man muss nur bei der Ausgabe etwas aufpassen. Floating Point Arithmetik ist nunmal um ein Vielfaches schneller und wird deshalb verwendet. Und Rundungsfehler gibt es auch bei BCD, nur keine Darstellungsfehler.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat