Выбор ответа Senior JSON и JSON Schema обновлено
Большие числа в JSON
Вопрос
API отдаёт {"id": 9007199254740993}. Фронтенд на JavaScript показывает 9007199254740992. В чём причина?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Числа в JS это double, целые больше 2^53 теряют точность. Number.MAXSAFEINTEGER равен 2^53 - 1.
Варианты ответа
- Сервер округлил число при сериализации, а фронтенд показал как есть
- JSON не поддерживает числа больше 2^31, и парсер обрезает старшие биты
- Ошибка кодировки UTF-8 при передаче длинной цифровой строки в теле
- Числа в JS это double, целые больше 2^53 теряют точностьправильный ответ
Разбор
Number.MAX_SAFE_INTEGER равен 2^53 - 1. Стандарт JSON размер чисел не ограничивает, но JSON.parse в JS превращает их в double, и младшие разряды теряются. Поэтому большие идентификаторы (например snowflake id) и деньги в копейках крупных сумм отдают строкой. Хороший тест для API с 64-битными id.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.