Есть ли ошибка при преобразовании числа в строку в Javascript? - PullRequest
2 голосов
/ 13 февраля 2012

Это происходит, когда я конвертирую большое число в строку в Javascript, похоже, это дает мне результат, которого я не ожидаю:

var x = 1234567890123456;

console.log (x) // 1234567890123456 --equal ...

console.log (x.toString ()) // 1234567890123456 --equal ...

var x = 12345678901234567;

console.log (x) // 12345678901234568 --different!

console.log (x.toString ()) // 12345678901234568 --different!

var x = 123456789012345678;

console.log (x) // 123456789012345680 --different!

console.log (x.toString ()) // 123456789012345680 --different!

console.log (x + "") // 123456789012345680 --different!

Может кто-нибудь сказать мне причину этого и как с этим бороться?

Ответы [ 2 ]

5 голосов
/ 13 февраля 2012

Причиной является максимальное количество чисел в JavaScript (+/- 9007199254740992) без потери точности.Также смотрите этот вопрос .

3 голосов
/ 13 февраля 2012

Javascript не имеет бесконечной числовой точности. Существует ограничение на количество значащих цифр, которые он будет отслеживать в 8-байтовых значениях с плавающей запятой двойной точности.

Более подробные сведения см. В разделе спецификации фактического номера ECMA 8.5 . Цитируется из этой спецификации:

Обратите внимание, что все положительные и отрицательные целые числа, у которых нет больше 2 ^ 53 представимы в типе Number

2 ^ 53 == 9007199254740992

...