3

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

注意:我不是在与那些相信“足够准确”与“准确”相同的人打架,也不是为了讨论星舰企业号因错误的、基于浮点数的算法而坠毁的问题。

4

1 回答 1

1

SQLLite 3 手册中,支持的数据类型是nullintegerreal(有效地floattext、 或blob。基于此,我希望引擎将任何输入decimal.Decimal转换为 areal然后将其作为 a 返回float给您,因为它不想将其向上转换为超过其准确性。

大多数实际的数据库(除了原型我几乎不会考虑使用 sqllite)支持十进制数据类型。我知道MySQL 可以。至于它们是否返回decimal.Decimal而不是float,不幸的是,我无法告诉你,因为我还没有对它们的准确性进行调查,float对我来说已经足够好了。不过,这将是一个不错的起点。

于 2012-02-01T17:21:13.207 回答