Forum: Object-Pascal / Delphi-Language
Delphi
by alzaimar,
26. Mai 2008
:gruebel: Was soll daran interessant sein (klappt übrigens auch schon mit zwei kleinen Zahlen, z.B. 0.1)? Das ist dann aber ein Darstellungsfehler. Der Rundungsfehler liegt immer innerhalb der Spezifikation für Floating Points (8-20 Stellen, je nach verwendetem Datentyp). Wir wollen hier nicht über die Eigenheiten von Floatingpointarithmetik und -Darstellung diskutieren (das wurde hier schon bis...
Forum: Object-Pascal / Delphi-Language
Delphi
by alzaimar,
26. Mai 2008
So ist es allgemein:
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...