Лучший способ справиться с очень большими длинными номерами в Ajax?

Javascript представляет все числа как числа с плавающей запятой двойной точности. Это означает, что он теряет точность при работе с числами в самом верхнем конце 64-битного типа данных Java Long - что угодно после 17 цифр. Например, номер:

714341252076979033

... становится:

714341252076979100

Моя база данных использует длинные идентификаторы, а некоторые находятся в опасной зоне. Я мог бы изменить ошибочные значения в базе данных, но это было бы сложно в моем приложении. Вместо этого прямо сейчас я довольно старательно проверяю, что сервер кодирует длинные идентификаторы как строки во всех ответах ajax.

Тем не менее, я бы предпочел разобраться с этим в Javascript. Мой вопрос: есть ли лучшая практика для принудительного разбора JSON для обработки числа как строки?

2 ответа

Решение

Вы должны отправлять свои значения в виде строк (то есть заключенных в кавычки), чтобы Javascript рассматривал их как строки, а не числа.

Я не знаю, как обойти это.

JavaScript представляет все числа как 64b IEEE 754 с плавающей точкой.

Если ваше целое число не может поместиться в 52 бита, то оно будет усечено, что и произошло здесь.

Если вам нужно изменить базу данных, измените ее, чтобы отправить 52-битные целые числа. Или 53-битные целые числа со знаком.

В противном случае отправьте их как строки.

Другие вопросы по тегам