#python #json #rest #aiohttp
#python #json #остальное #aiohttp
Вопрос:
В настоящее время я сталкиваюсь со странным поведением в клиент-серверном приложении.
Сервер написан на python и использует aiohttp и возвращает json с большим количеством идентификаторов (тип номера). Каждый идентификатор изменен. Я распечатал ответ на сервере перед возвратом, и он содержит правильный идентификатор.
Идентификаторы примеров: 481439269479645194, 190601736623226882, 338222603829510164
Однако на сетевой панели браузера я вижу, что номер поступает измененным. Последние цифры отличаются.
Для приведенных выше примеров: 481439269479645200, 190601736623226880, 338222603829510140
Я не могу определить, где и как меняются эти идентификаторы.
Ответ №1:
Числа в браузерах хранятся как 64-разрядные с плавающей запятой. Наибольшее целое число, которое может быть представлено точно, равно 9007199254740991. Ваши цифры намного больше, чем than, и являются приблизительными. Например:
console.log([481439269479645194, 190601736623226882, 338222603829510164])
будет выводить:
[481439269479645200, 190601736623226880, 338222603829510140]
Вместо этого вы можете использовать BigInt для обработки этих чисел, но вы должны хранить их в исходном коде JavaScript и в JSON в виде строк:
console.log([BigInt("481439269479645194"), BigInt("190601736623226882"), BigInt("338222603829510164")])
Комментарии:
1. Хорошо, я только что выяснил с помощью fiddler, что последнее число, например, указано как
3.3822260382951014E 17
, что приводит к числу, показанному выше. Поэтому, по сути, единственным разумным решением является использование строкового типа, я думаю. Черт.