如何在python中获得小数精度?

时间:2013-04-02 15:47:28

标签: python floating-point

情况如下:

  • 我正在编写单元测试,并将NUMERICPostgreSQL的货币与精确(10, 2)进行比较

我的test断言为

self.assertEquals(Decimal(89.12), user_two_transactions[0].amount)

我失败了

AssertionError: Decimal('89.1200000000000045474735088646411895751953125') != Decimal('89.12')

如何使其更精确,并确保数量在数据库中正确保存?

1 个答案:

答案 0 :(得分:10)

使用字符串初始化Decimal:

Decimal('89.12')

如您所见,89.12不能完全表示为浮点数。

Decimal construction documentation.

您的其他选项是(sign, digits, exponent)元组:

In [3]: Decimal((0, (8, 9, 1, 2), -2))
Out[3]: Decimal('89.12')

但请不要在没有充分理由的情况下这样做:)