【问题标题】:Can I get a Decimal back from Avg on a DecimalField in Django?我可以在 Django 的 DecimalField 上从 Avg 返回 Decimal 吗?
【发布时间】:2012-02-01 03:29:05
【问题描述】:

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

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

【问题讨论】:

  • 我刚刚用谷歌搜索了star ship enterprise float based arithmetic。无论如何,在 PostgreSQL 上我也得到了一个浮点数。
  • 这是一个奇怪的具体说明。

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


【解决方案1】:

从SQLLite 3 manual 开始,支持的数据类型为null、integer、real(实际上是float)、text 或blob。基于此,我希望引擎将任何输入 decimal.Decimal 转换为 real,然后将其作为 float 返回给您,因为它不想将其向上转换为超过其准确性。

大多数实际数据库(我几乎不会将 sqllite 视为原型之外的任何东西)支持十进制数据类型。我知道MySQL does。至于他们是否返回decimal.Decimal 而不是float,我不能告诉你,因为我还没有对他们的准确性进行调查,float 对我来说已经足够好了。不过,这将是一个不错的起点。

【讨论】:

    猜你喜欢
    • 2020-03-02
    • 2021-09-26
    • 2021-04-23
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2016-01-17
    • 1970-01-01
    • 2013-03-10
    相关资源
    最近更新 更多