3

情况如下:

  • 我正在编写一个单元测试并比较精确NUMERIC的货币PostgreSQL(10, 2)

test的断言为

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

我失败了

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

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

4

1 回答 1

11

用字符串初始化 Decimal:

Decimal('89.12')

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

十进制施工文件。

你的另一个选择是一个(sign, digits, exponent)元组:

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

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

于 2013-04-02T15:49:02.503 回答