Поддерживает ли JavaScript 64-разрядные целые числа?


мне было интересно, если JavaScript неправильно обрабатывает 64-разрядные целые числа или я делаю что-то не так?

У меня есть следующий код:

var str = "0x4000000000000000";   //4611686018427387904 decimal
var val = parseInt(str);
alert(val);

Я получаю это значение: "4611686018427388000", которое равно 0x4000000000000060

2 65

2 ответа:

JavaScript представляет числа с помощью IEEE-754 формат двойной точности (64 бит). Насколько я понимаю, это дает вам точность 53 бит, или от пятнадцати до шестнадцати десятичных цифр. Ваше число имеет больше цифр, чем JavaScript может справиться, так что вы в конечном итоге с приближением.

Это не совсем "неправильное обращение" как таковое, но, очевидно, это не очень полезно, если вам нужна полная точность на больших числах. Есть несколько библиотек JS, которые могут обрабатывать большие числа, например, BigNumber и тип int64.

Chromium версия 57 и более поздняя изначально поддерживает целые числа произвольной точности. Это называется BigInt и является работал на для других браузеров, а также. Это значительно быстрее чем реализации JavaScript.