Проблема преобразования для длинной строки целых чисел в JavaScript - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь преобразовать длинную строку, в которой есть только целые числа, в числа.

var strOne = '123456789123456789122';
parseInt(strOne, 10);
// => 123456789123456800000

var strTwo = '1234567891234567891232';
parseInt(strTwo, 10);
// => 1.234567891234568e+21

Ожидаемый результат должен совпадать с strOne и strTwo, но здесь этого не происходит.,При преобразовании строки в число output изменяется.

Как лучше всего решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

BigInt теперь доступен в браузерах.

BigInt - это встроенный объект, который предоставляет способ представления целых чисел больше 253, чтонаибольшее число JavaScript может надежно представлять с помощью примитива Number.

value Числовое значение создаваемого объекта.Может быть строкой или целым числом.

var strOne = '123456789123456789122';

var intOne = BigInt(strOne);

var strTwo = '1234567891234567891232';

var intTwo = BigInt(strTwo);

console.log(intOne, intTwo);
0 голосов
/ 10 февраля 2019

Ваш номер, к сожалению, слишком велик и переносится после завершения преобразования.

Самое большое целое число, которое вы можете выразить в JavaScript, это 2^53-1, оно задается как Number.MAX_SAFE_INTEGER, см. Документ MDN здесь .

Причина этого числа заключается в том, что JavaScript использует числа в формате с плавающей запятой двойной точности, как указано в IEEE 754, и может безопасно представлять только числа между - (2 ^ 53- 1) и 2 ^ 53 - 1.

console.log(Number.MAX_SAFE_INTEGER);

Если вы хотите работать с числами, превышающими этот предел, вам придется использовать представление, отличное от Number, например String, и использовать библиотеку дляобрабатывать операции (см., например, библиотеку BigInteger ).

...