Może mi ktoś wyjaśnić czemu 7*12.2 = 85.39999999999999 w javascripcie?
Dobra temat do zamknięcia już znalazlem odpowiedź.
toFixed()
Może mi ktoś wyjaśnić czemu 7*12.2 = 85.39999999999999 w javascripcie?
Dobra temat do zamknięcia już znalazlem odpowiedź.
toFixed()
JimMorrison napisał(a)
Może mi ktoś wyjaśnić czemu 7*12.2 = 85.39999999999999 w javascripcie?
a jak pomnożysz 7.0*12.2 co wychodzi???
Znalazłeś coś w rodzaju obejścia, ale to nie jest odpowiedź na pytanie ;) Chodzi o dokładność zapisu liczb.Wszystkie liczby zapisywane są binarnie. Liczbę 12 zapisuje się jako 1100. Liczba 12.2 = 12 + 1/5. Liczby 1/5 nie da się przedstawić binarnie w postaci skończonej. Analogicznie 1/3 = 0.3333... w postaci dziesiątkowej ma nieskończone rozwinięcie.
Skończona dokładność liczb zmiennoprzecinkowaych na kompie. To nie wina javascriptu, ale komputerów. Jest tylko jeden sposób obejścia - przenieść się na lewą stronę separatora, czyli:
<script>
var mul = 10;
var y = 12.2 * mul;
var x = 3 * mul;
var z = x * y / mul / mul;
document.write(z);
</script>
Zaokrąglanie przez toFixed() zawsze wiążę sięz błędem obliczeniowym...
Opolski Portal Programistyczny
http://programowanie.opole.pl