如何解决Django DecimalField 不一致的舍入
Django 2.2,PostgreSQL 数据库。我有一个带有 Line
属性的 positions
对象。这是 ArrayField
的 DecimalField
,其中 max_digits
为 12,decimal_places
为 3。
我将一些浮点数存储为 Decimal
并将它们从数据库中取出:
pos = [6586.87849502,2.04190477e-01,7.14666669e-01]
line = Line(positions=pos)
line.save()
line.refresh_from_db() # send it through Django's ORM piping
print(line.positions)
输出:
[十进制('6586.879')、十进制('0.204')、十进制('0.715')]
有趣的是,尽管下一个更有效的数字低于 5,但第一个位置被四舍五入。另一个浮动按预期四舍五入。
我以为可能是 PostgreSQL 搞砸了,但不是:
INSERT INTO line(positions) VALUES (array[6586.87849502,7.14666669e-01]) RETURNING positions;
位置(数字[]) {6586.878,0.204,0.715}
真正的问题是我试图预测数据库中会出现什么,精确到小数点后三位:
[Decimal(x).quantize(Decimal("0.001")) for x in pos]
可能会产生
[十进制('6586.878')、十进制('0.204')、十进制('0.715')]
或
[十进制('6586.879')、十进制('0.205')、十进制('0.714')]
根据 decimal.ROUND_*
标志,我传入 quantize()
,但我从未在整个数组中获得一致的舍入。在插入数字之前,Django 对我的数字做了什么样的预处理?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。