Изменены номера ответов Python aiohttp

#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 , что приводит к числу, показанному выше. Поэтому, по сути, единственным разумным решением является использование строкового типа, я думаю. Черт.