对Avg
使用models.DecimalField
聚合时,返回的值为float
,而不是decimal.Decimal
。这是因为我的特定数据库(在本例中为sqlite3)不支持聚合值为小数?如果是这样,有数据库吗?有没有办法解决这个问题(即,将值作为小数返回的方法),以便可以完成精确的十进制数学运算(同样,不将float
转换为str
然后再返回到decimal.Decimal
)?
注意:对于那些认为“足够准确”与“准确”相同的人,或者因为错误的基于浮动的算法导致Star Ship Enterprise崩溃的讨论而引发的火焰诱饵,我并不是在争吵。 / p>
答案 0 :(得分:1)
来自SQLLite 3 manual的受支持的数据类型有null
,integer
,real
(有效float
),text
或{{ 1}}。基于此,我希望引擎将任何输入blob
转换为decimal.Decimal
,然后将其作为real
返回给您,因为它不希望将其转换为超过它的准确性
大多数实际数据库(我很少考虑sqllite除了原型以外)支持十进制数据类型。我知道MySQL does。至于他们是否返回float
而不是decimal.Decimal
,我不能不幸地告诉你,因为我没有对他们的准确性进行调查,float
对我来说已经足够好了。这是一个开始的好地方。