Mam pole klasy Float currentCost==19.8
gdy do metody przekazuje jako coinValue==5
public void calculateCurrentCost(float coinValue) {
currentCost-=coinValue;
....
}
to currentCost==14.799999 :-|
Dlaczego?
Mam pole klasy Float currentCost==19.8
gdy do metody przekazuje jako coinValue==5
public void calculateCurrentCost(float coinValue) {
currentCost-=coinValue;
....
}
to currentCost==14.799999 :-|
Dlaczego?
Ponieważ istnieje coś takiego jak dokładność numeryczna. Komputer zapisuje liczby z pewną dokładnością i czasami zdarza się, że wychodzą takie efekty. Jak chcesz mieć dokładne obliczenia używaj BigDecimal.
Wiem że istnieje dokładność numeryczna ale z jednym miejscem po przecinku chyba nie powinno być problemu. To nie jest kwestia "zdarza się" tylko tak jest zawsze gdy odejmuje lub mnożę liczby które nie są wielokrotnością 0.5.
Liczba 19.8 ma jedno miejsce po przecinku w systemie dwójkowym, ale ma nieskończone rozwinięcie dwójkowe 10011.110011001100(1100). A komputery posługują sie rozwinięciem dwójkowym.