Thread 123 -> 123.00 bzw. 1.2 -> 1.20 (19 answers)
Opened by Thomas at 2010-02-10 13:59

murphy
 2010-02-10 16:21
#132542 #132542
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Ja, es kann auch in diesem Falle zu Ungenauigkeiten kommen, nämlich dann, wenn Du mit Werten hantierst, deren fraktionaler Anteil nicht exakt binär darstellbar ist.

Zum Beispiel ist für Perl 0.30 != 0.20 + 0.10, denn auf die maximale Genauigkeit der Fließkommazahlen gerundet bedeutet dieser Vergleich eigentlich 0.29999999999999999 != 0.20000000000000001 + 0.10000000000000001 == 0.30000000000000002.

Wenn Du jetzt mittels sprintf auf eine feste Anzahl von Stellen rundest und dann Strings vergleichst, wirst Du manche der möglichen Fehler bei Fließkommaoperationen vermeiden, aber nicht alle. Es gibt in diesem Forum dutzende alter Threads die sich mit der Problematik von Rundungsfehlern und Währungsberechnungen auseinandersetzen. Suche einfach mal danach, wenn Du mehr Informationen haben willst. Die kurze Antwort ist aber die, die ich Dir schon gegeben habe: Willst Du mit exakten Dezimalbrüchen rechnen, dann tue das auch. Benutze keine Fließkommazahlen sondern Ganzzahlen oder Brüche.
When C++ is your hammer, every problem looks like your thumb.

View full thread 123 -> 123.00 bzw. 1.2 -> 1.20