我可以在Django的DecimalField上从Avg获得一个Decimal吗?

时间:2012-02-01 03:29:05

标签: python django decimal floating-accuracy django-aggregation

Avg使用models.DecimalField聚合时,返回的值为float,而不是decimal.Decimal。这是因为我的特定数据库(在本例中为sqlite3)不支持聚合值为小数?如果是这样,有数据库吗?有没有办法解决这个问题(即,将值作为小数返回的方法),以便可以完成精确的十进制数学运算(同样,不将float转换为str然后再返回到decimal.Decimal)?

注意:对于那些认为“足够准确”与“准确”相同的人,或者因为错误的基于浮动的算法导致Star​​ Ship Enterprise崩溃的讨论而引发的火焰诱饵,我并不是在争吵。 / p>

1 个答案:

答案 0 :(得分:1)

来自SQLLite 3 manual的受支持的数据类型有nullintegerreal(有效float),text或{{ 1}}。基于此,我希望引擎将任何输入blob转换为decimal.Decimal,然后将其作为real返回给您,因为它不希望将其转换为超过它的准确性

大多数实际数据库(我很少考虑sqllite除了原型以外)支持十进制数据类型。我知道MySQL does。至于他们是否返回float而不是decimal.Decimal,我不能不幸地告诉你,因为我没有对他们的准确性进行调查,float对我来说已经足够好了。这是一个开始的好地方。