Поддерживает ли JavaScript 64-битные целые числа? - PullRequest
72 голосов
/ 10 марта 2012

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

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

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

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

Ответы [ 2 ]

79 голосов
/ 10 марта 2012

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

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

9 голосов
/ 06 июня 2018

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

...