Могу ли я получить десятичное число от Avg на DecimalField в Django? - PullRequest
3 голосов
/ 01 февраля 2012

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

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

1 Ответ

1 голос
/ 01 февраля 2012

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

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

...