Поддерживает ли JavaScript 64-битные целые числа?
Мне было интересно, не ошибается ли JavaScript в 64-битных целых числах, или я делаю что-то неправильно?
У меня есть следующий код:
var str = "0x4000000000000000"; //4611686018427387904 decimal
var val = parseInt(str);
alert(val);
Я получаю это значение: "4611686018427388000", который составляет 0x4000000000000060
Ответы
Ответ 1
JavaScript представляет числа, используя IEEE-754 формат с двойной точностью (64 бит). Насколько я понимаю, это дает вам точность 53 бит или от пятнадцати до шестнадцати десятичных цифр. Ваш номер имеет больше цифр, чем может справиться с JavaScript, поэтому вы получите аппроксимацию.
На самом деле это не "неправильное обращение", но, очевидно, это не очень полезно, если вам нужна полная точность для больших чисел. Существует несколько JS-библиотек, которые могут обрабатывать большие числа, например BigNumber и Int64.
Ответ 2
Хром версии 57 и более поздней версии поддерживает целые числа произвольной точности. Это называется BigInt, и он также работает для других браузеров. Это значительно быстрее, чем реализация JavaScript.