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 は float として正確に表すことはできません。

10 進数の建設文書。

あなたの他のオプションは(sign, digits, exponent)タプルです:

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

しかし、正当な理由なしにそれをしないでください:)

于 2013-04-02T15:49:02.503 に答える