Błąd przy mnożeniu liczb

0

Może mi ktoś wyjaśnić czemu 7*12.2 = 85.39999999999999 w javascripcie?

Dobra temat do zamknięcia już znalazlem odpowiedź.

toFixed()

0
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???

0

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.

1

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

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