RavenDB: значение поля объекта округляется случайным образом - PullRequest
1 голос
/ 19 апреля 2019

Прежде всего, я хочу извиниться за несколько двусмысленный заголовок вопроса, но я буквально понятия не имею, как еще описать эту причудливую проблему. По сути, у меня есть хранилище документов внутри RavenDB, и, несмотря на попытки изменить его, существуют странные ограничения, которые заставляют его случайным образом округлять его до разных значений.

Это лучше всего показано через этот рисунок, который я сделал из него: Constantly Being Rounded?

Внутри класса C #, из которого он создается, он сохраняется как ulong, и все находится в пределах кода до тех пор, пока не будет загружен. В этот момент у меня несоответствие идентификатора. Как видите, имя документа - это идентификатор, который я пытаюсь вставить, они должны совпадать; но вместо этого меня очень странно сбивает с толку.

У кого-нибудь есть идея?

1 Ответ

2 голосов
/ 19 апреля 2019

Основная проблема связана с числами JavaScript. Все числа JS на самом деле double, что означает, что они хороши для целых чисел до 2 ^ 53 или около того. Кроме того, вы начинаете терять точность.

Здесь на самом деле происходит то, что браузер загружает документ и сохраняет его обратно. Это происходит через движок JS, что приводит к потере точности числа. Проблема возникает, только если вы обновляете документы через студию.

В последней версии RavenDB это будет обнаружено, и вы получите предупреждение:

Number too large warning

...