2013-10-05 20 views
1

這是我輸入:爲什麼python decimal.Decimal精度與equable args不同?

>>> from decimal import Decimal 
>>> Decimal('114.3') 
Decimal('114.3') 
>>> Decimal(114.3) 
Decimal('114.2999999999999971578290569595992565155029296875') 

我以爲小數的這兩個實例必須是平等的,但與十進制浮點ARG看似鬆散的精度。爲什麼是這樣?我的Python版本是2.7.3。提前致謝!

回答

2

第二行給出了二進制浮點數的精確十進制值,它近似於114.3。這幾乎都是關於二進制浮點的,對於Decimal並不多。有關詳細信息,請參閱the docs

稍後:如果使用Python 3,請參閱these docs。同樣基本的東西,但Python 3有更多的工具來幫助你探索「這樣的情況」。

3

當你做Decimal(114.3),你正在創建一個常規的浮動對象,然後將它傳遞給十進制。由於二進制浮點不精確,當浮點數114.3被創建時,在小數點看到它之前,精度就會丟失。沒有辦法讓精度恢復。這就是爲什麼Decimal接受字符串表示法作爲輸入的原因,因此它可以看到您實際輸入的內容並使用正確的精度級別。

+0

* level *的精度與它沒有任何關係。 –