Есть ли ошибки при использовании $ inc со значениями с плавающей запятой в MongoDB? - PullRequest
3 голосов
/ 16 марта 2012

Во-первых, полностью ли поддерживается приращение с помощью плавающих значений?

Какой уровень точности с плавающей запятой поддерживается?

Ответы [ 2 ]

6 голосов
/ 17 марта 2012

MongoDB поддерживает увеличение на значения с плавающей запятой. Это приведет к тому, что сохраненное значение будет преобразовано в число с плавающей запятой, если оно в настоящее время является другим числовым типом, что может привести к ошибкам округления, если предыдущее значение было очень большим 64-разрядным целым числом.

Применяются все стандартные предупреждения, касающиеся чисел с плавающей запятой. MongoDB, как и JavaScript-интерпретаторы в веб-браузерах, хранит значения с плавающей точкой двойной точности IEEE (64-разрядные). Эти значения имеют точность 53 бита. Промежуточные вычисления могут быть вычислены с использованием 80-битных длинных двойных чисел, но конечный результат всегда сохраняется как 64-битное значение с плавающей запятой двойной точности.

1 голос
/ 17 марта 2012

Я столкнулся с проблемами в оболочке при использовании очень больших чисел. JavaScript будет округляться, так что приращения не будет, и он пойдет в бесконечный цикл. Мне пришлось заставить его использовать NumberLong (), чтобы обойти проблему. Честно говоря, я не использовал явно тип с плавающей запятой, но я считаю, что это JavaScript по умолчанию - я использовал его как целое число (число).

Насколько я знаю, это не должно быть проблемой в драйвере языка, отличном от JavaScript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...