2012-02-01 69 views
3

当使用Avg聚合为models.DecimalField时,返回的值是float,而不是decimal.Decimal。这是因为我的具体数据库(在这种情况下sqlite3)不支持聚合值作为小数?如果是这样,那里有数据库吗?有没有办法解决这个问题(即将数值返回为小数点的方法),以便精确计算小数(也可以不将float转换为str,然后再转换回decimal.Decimal)?在Django的DecimalField中,我可以从平均值中获得Decimal吗?

注意:对于那些认为“足够精确”与“准确”相同的人,或者因为错误的基于浮点的算术而讨论Star Ship Enterprise崩溃的人,我并不是在拖钓。

+1

我刚刚搜索了'星舰企业基于浮点运算'。无论如何,在PostgreSQL上我也得到一个浮点数。 – 2012-02-01 03:34:27

+1

这是一个奇怪的具体说明。 – millimoose 2012-02-01 03:49:07

回答

1

SQLLite 3 manual,所支持的数据类型是nullintegerreal(有效float),text,或者blob。基于此,我期望引擎可以将任何输入decimal.Decimal转换为real,然后将其作为float返回给您,因为它不想将其转换为精度。

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