JSON.parse неправильно анализирует / конвертирует большие числа

7

Моя проблема очень проста, но я не уверен, есть ли "родное" решение с использованием JSON.parse.

Я получаю эту строку из API:

{ "key" : -922271061845347495 }

Когда я использую JSON.parse в этой строке, он превращается в этот объект:

{ "key" : -922271061845347500 }

Как вы можете видеть, синтаксический анализ останавливается, когда число слишком велико (вы можете проверить это поведение здесь). Он имеет только 15 точных цифр, последний округлен, а те, которые установлены после 0. Есть ли "родное" решение для сохранения точного значения? (это идентификатор, поэтому я не могу его округлить)

Я знаю, что я могу использовать регулярное выражение для решения этой проблемы, но я бы предпочел использовать "родной" метод, если он существует.

  • 1
    Вы можете сделать это строкой?
  • 0
    Попробуйте, { "key" : "-922271061845347495" }
Показать ещё 2 комментария
Теги:
floating-point
numbers

1 ответ

15
Лучший ответ

Ваше предположение о том, что синтаксический анализ останавливается после неправильного ввода определенных цифр.

Здесь говорится здесь:

В JavaScript все числа - это числа с плавающей запятой. Использование JavaScript стандартный 8-байтовый числовой формат с плавающей запятой IEEE, что означает диапазон от:

± 1.7976931348623157 x 10 308 - очень большой и ± 5 x 10 -324 - очень маленький.

Поскольку JavaScript использует числа с плавающей запятой, точность обеспечивается только для целых чисел: -9007199254740992 (-2 53) и 9007199254740992 (2 53)

Вы числитесь за пределами "точного" диапазона, поэтому он преобразуется в ближайшее представление номера JavaScript. Любая попытка оценить это число (с использованием JSON.parse, eval, parseInt) приведет к потере данных. Поэтому я рекомендую передать ключ в виде строки. Если вы не контролируете API, напишите запрос функции.

  • 0
    Это на самом деле не отвечает на вопрос, хотя. "Есть ли нативное решение, чтобы сохранить точное значение?"
  • 0
    Родным решением было бы написать свой собственный анализатор JSON, который анализирует числа как строки.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню