2013-04-02 91 views
3

這裏的情況是:如何獲得python的小數精度?

  • 我寫一個單元測試,通過對比這是PostgreSQLNUMERIC精確的貨幣(10, 2)

test已經宣稱爲

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

我獲得失敗爲

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

我怎樣才能讓它更精確,並確保金額正確保存在數據庫中?

回答

10

初始化十進制用字符串:

Decimal('89.12') 

正如你可以看到,89.12不能準確地爲float來表示。

Decimal construction documentation.

你的另一種選擇是一個(sign, digits, exponent)元組:

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

但請不要做,沒有一個很好的理由:)

+0

巨大的感謝!我錯過了 – daydreamer