На самом деле значение не превышает максимальное числовое значение в JavaScript («всего» 1,7 308 или около того).
Однако значение на превышает диапазон «интегральной точности».Дело не в том, что отправляется неправильный номер: скорее, литерал 12000000000002539 может быть представлен только с такой точностью, как 12000000000002540, и, таким образом, никогда правильное числовое значение в JavaScript.(Диапазон интегралов равен +/- 2 53 .)
Это интересное явление использования двойной относительной точности (двоичный код 64 на языке IEEE-754) для хранения всех числовых значений, включая целые числа:
12000000000002539 === 12000000000002540 // true
Максимальное значимое количество десятичных цифр, которые точно сохраняются в виде числового значения, равно 15(15,95, действительно).Выше указано 17 значащих цифр, поэтому часть из наименее значимой информации молча теряется .В этом случае как синтаксический анализатор / обработчик JavaScript считывает литеральное значение.
Единственный безопасный способ обработки целых чисел этой величины в JavaScript - это использование строкового литерала или разбиениеэто по-другому (например, пользовательский числовой тип или "bigint library" ).Однако Я рекомендую просто использовать строку , так как она удобочитаема, относительно компактна (всего два дополнительных символа в JSON) и не требует специальной сериализации.Поскольку в данном случае значение является просто «id», я надеюсь, что математика не должна выполняться на нем:)
Счастливое кодирование.