Rundungsfehler

ARadauer

Top Contributor
Java:
System.out.println(0.25d - 2d * 0.1d);
ist 0.04999999999999999.. ja klar...
ich weiß warum das passiert, weil einfach die dezimal zahl binär intern binär dargestellt wird und sich da obwohl dezimal das nicht passieren würde, oft binär dann rundungsdifferenzen auftauchen...

aber jetzt ehrlich was kann ich jetzt dagegen tun. wenn ich eine anwendung schreibe wos wirklich um genaue werte geht?
Also wenn ich jetzt das ergebnis durch 0.05 dividieren muss, was mach ich dann?
 
S

SlaterB

Gast
dividiere doch durch 0.04999999999999,
denn selbst wenn durch 0.05 musst du bei einer double-Rechnung danach wieder mit Ergebnis x.yz99999 rechnen,
da macht der Divisor keinen Unterschied,

am Ende eben runden, oder mit long/ BigDecimal rechnen
 

VfL_Freak

Top Contributor
Moin,

hmm - spannende Frage ;)

Ich war immer der Meinung, dieses Problem durch das Schlüsselwort strictfp umgehen zu können, dem ist aber in diesem Fall nicht so, wie ich gerade gesehen habe ....

Gruß
Klaus
 

thE_29

Top Contributor
Das Problem haste in jeder Programmiersprache ;)
Ist in C genauso da, dieses Problem..

Du könntest das Problem ein bißchen umgehen, indem du die Zahlen mit denen du rechnest mit 1 MIO multiplizierst und dadurch auf Integer Basis rechnest..
So haben wir das damals in der Kassensoftware gelöst.. Da gabs kein float, nur int oder long und halt * 100 oder * 1000. Je nach Kommastelle..
 

musiKk

Top Contributor
Ich war immer der Meinung, dieses Problem durch das Schlüsselwort strictfp umgehen zu können, dem ist aber in diesem Fall nicht so, wie ich gerade gesehen habe ....

[c]strictfp[/c] sorgt nur dafür, dass auch die Zwischenergebnisse bei Berechnungen in einfacher oder doppelter Genauigkeit vorliegen. Wird es nicht verwendet, dürfen Zwischenergebnisse auch noch genauer sein.
 

Ähnliche Java Themen

Neue Themen


Oben