3

При использовании агрегата Avg для models.DecimalField возвращается значение float, а не decimal.Decimal. Это потому, что моя конкретная база данных (в данном случае sqlite3) не поддерживает агрегированные значения как десятичные числа? Если да, существуют ли базы данных? Есть ли способ обойти это (т. Е. Способ вернуть значение в виде десятичного числа), чтобы можно было сделать точную десятичную математику (также, не преобразовывая float в str, а затем обратно в decimal.Decimal)?Могу ли я получить десятичный знак из Avg на DecimalField в Django?

Примечание: Я не троллинг для боев с людьми, которые считают, что «достаточно точный» - это то же самое, что «точный», или пламенное приманка для дискуссий о разрушении Star Ship Enterprise из-за ошибочной арифметики с плавающей точкой.

+1

Я просто искал «арифметику на основе« плавания на звездах ». В любом случае, на PostgreSQL я получаю поплавок. –

+1

Это странно конкретная заметка. – millimoose

ответ

1

Из SQLLite 3 manual, поддерживаемые типы данных null, integer, real (эффективно float), text или blob. Исходя из этого, я бы ожидал, что двигатель запустит любой вход decimal.Decimal в real, а затем вернет его как float вам, так как он не захочет повышать его точность.

Большинство фактических баз данных (я бы вряд ли рассмотрел sqllite для чего-либо большего, чем прототип), поддерживал десятичные типы данных. Я знаю MySQL does. Что касается того, вернули ли они decimal.Decimal, а не float, я не мог сказать вам, к сожалению, поскольку я не проводил расследование их точности, float был достаточно хорош для меня. Было бы неплохо начать.

 Смежные вопросы

  • Нет связанных вопросов^_^