Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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