2017-12-14 106 views
7

UruchamiającJavaScript parseInt konwersji jest buggy

console.log(parseInt("9658921879781125"))
daje wartość 9658921879781124, która jest mniejsza niż pierwotnej wartości.

Dlaczego tak się dzieje?

+1

http://2ality.com/2012/07/large-integers.html –

+0

ale jest w stanie przerobić 9658921879781126 prawidłowo odpowiedź –

+1

Zobacz G. Petrioli użytkownika. To niebezpieczne, nie oznacza to, że za każdym razem zawodzi. – NikxDa

Odpowiedz

4

To byłoby ponieważ

9658921879781125 > Number.MAX_SAFE_INTEGER // true 

Więc to jest niebezpieczne, aby spróbować pracy z liczb większych niż Number.MAX_SAFE_INTEGER


MAX_SAFE_INTEGER stałym ma wartość 9007199254740991 (9,007,199,254,740,991 lub ~ 9 kwadrylion). Rozumowanie tej liczby jest to, że JavaScript używa formatu liczb zmiennoprzecinkowych podwójnej precyzji, jak określono w IEEE 754 i może reprezentować tylko bezpiecznie numerów pomiędzy - (2 - 1) i 2 - 1.

Bezpieczeństwo w tym kontekście odnosi się do możliwości dokładnego odwzorowania liczb całkowitych i ich poprawnego porównania.