Restream / reindexer

Embeddable, in-memory, document-oriented database with a high-level Query builder interface.
https://reindexer.io
Apache License 2.0
770 stars 64 forks source link

Ошибки int64 #28

Closed hatenaki closed 5 years ago

hatenaki commented 5 years ago

При попытке сохранить большое по модулю отрицательное int64 значение через http API, используя update методом PUT, в документ сохраняется неверное значение. Сериализация в json на стороне клиента API точно происходит без ошибок. Примеры: сохраняем -9223372036854775756, получаем -9223372036854776000; сохраняем -4611686018427387852, получаем -4611686018427388000.

olegator77 commented 5 years ago

Проблема связана с JSON парсером gason - при парсинге JSON все number переводятся в число с плавающей точкой с потерей точности. В версии reindexer v1.10.4 - починим.

hatenaki commented 5 years ago

Спасибо за доработки в новой версии! Проблема некорректного сохранения решена. Однако при использовании face проблема преобразования проявляется по прежнему, что делает неприемлемым использование столь удобного инструмента для ручного добавления и изменения данных. Критичность проблемы относительно низкая, тем не менее хочется увидеть ее фикс в будущих версиях. re1

olegator77 commented 5 years ago

Тут уже малой кровью ничего не сделаешь. Стандарт EMCA обещает сохранение точности в JavaScript только до 2^53 https://stackoverflow.com/questions/307179/what-is-javascripts-highest-integer-value-that-a-number-can-go-to-without-losin