Double za to nemůže. :-)
Možná by stačilo zvolit malě kladné eps a misto
"a == b"
používat
"abs(a - b) < eps".
Honza
Benda Lukas wrote:
At se to zda absurdi kupodivu v naprosto bezne praci potrebuju presnost.
Kdyz mam delat testy musim mit jistotu ze 39.9 / 10 = 39.9 *0.1 =
39.9/100. Kdyz mi kazda tato operace vrati jiny vysledek pak je neco
sakra spatne. Takze typ double pro mne vlastne efektvine skocil.
Dekuji za ten typ na BigDecimal.
Nemate tuseni proc se v JAVA napriklad 39.9 / 10 = 3.9899999999999998?
Potrebuji cislo zaokrouhlit napr. na dve desetina mista. Puziji
jednocuchy vzorec Math.round(cislo * 100) / 100 bohuzel konkretne u
cisla zmineneho vise to nejak nevychazi. Nevite co s tim?
Záleží na tom, k jakému účelu potřebuješ číslo zaokrouhlit.
Je-li to jenom proto, aby se hezky vytisklo, je výhodnější se o
zaokrouhlování nestarat
a přenechat starost o vzhled čísla formátovacímu objektu. Použiješ-li
místo
System.out.println( 39.9 + " / " + 10 + " = " + 39.9/10 );
formátovaný výstup
System.out.printf( "%.1f / %d = %.2f", 39.9, 10, 39.9/10 );
budeš mít po starostech - vytiskne se
39.9 / 10 = 3.99
Metoda printf ale funguje až od Javy 5.0 - u starších verzí musíš
použít trošku
komplikovanější metody formátování.
Potřebuješ_li z nějakého důvodu s takto zaokrouhlaným číslem opravdu
počítat, musíš si
ujasnit, jestli ti opravdu ta chyba někde na 14. desetinném místě vadí
- pak použij
např. BigDecimal, nebo jestli tě to jenom obtěžuje při debugování -
pak se na to
vykašli.