JS problemy z zaokrągleniem

Co może pójść nie tak w prostym mnożeniu? Miałem okazje przekonać się o tym, gdy próbowałem pomnożyć cenę produktu w euro przez jego ilość.
I wtedy pojawił się on… błąd precyzji typu liczbowego.

Oto historia głupiego błędu.

Na początek fragment kodu:

const a = 1.005 ;
const b = 100;
const result = a * b;
test.is.equal(result, 100.5) //result false 100.5 not equal 100.49999999999999

Ok zapomniałem, o niedokładności typów dziesiętnych w JS. Chyba wystarczy, że zaokrągle:

result = Math.round(result)

tylko że JS zaokrągli do pełnej liczby, to może

Math.round(result*10)/10

Niestety nie na każdej przeglądarce zadziała (znowu precyzja typu zmiennoprzecinkowego przesyła pozdrowienia).

Ale znalazłem obejście problemu:

 (a*b).toFixed(1) // zwróci "100.5" trzeba tylko rzutować na typ numeryczny:
 +(a*b).toFixed(1) //zwróci 100.5 bingo!

całość zmagań tutaj:
https://codepen.io/dodekx/pen/XZaLQy?editors=0011

One thought on “JS problemy z zaokrągleniem

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *