Problem z odejmowaniem float'ów

0

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?

0

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.

0

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.

0

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1