2015-08-20 94 views
1

正如你們中許多人已經知道的那樣,有時Python會將例如3.75 ....變成3.7而不是3.8,這當然是一個問題。 (我在Python 3上)。在Python中正確舍入浮點數的最簡單方法是什麼?

另一個用戶在這裏提出了一個非常好的Python函數,他稱之爲round_exact(可以通過搜索在Stack Overflow中找到這個函數),但不幸的是,即使這個函數對於我的目的,因爲它似乎認爲在過去的小數位零總是多餘的,並將其削減。

(我的意思是,我想看看1.695到1.70,如果我想兩位小數,而不是1.7)。

所以,我還是想問一下關於如何處理Python的附加意見在舍入花車時的缺點。

+4

在最後一個小數位* A零是*多餘的。您正在尋找打印數字的方法,而不是打印數字。 – juanchopanza

+0

https://docs.python.org/2/library/functions.html#round - 對行爲和鏈接進行簡要說明。 (順便說一下,這不是一個「Python問題」,而是一個與IEEE 754相關的問題,相對精度浮點運算用base2編碼。) – user2864740

+2

*「有時候Python比如實現3.75 ....到3.7而不是3.8」* - 我只是測試它,它到達3.8。你到底在說什麼? –

回答

3

十進制模塊允許通過舍入的精確控制並且它可以保持尾隨零:

>>> Decimal('1.695').quantize(Decimal('.01'), rounding=ROUND_HALF_UP) 
Decimal('1.70') 
+0

這似乎完美地工作。我不能夠感謝你。不過,我注意到ROUND_UP對我來說不是正確的舍入選項。通過將其改爲ROUND_HALF_UP似乎給了我期待的「到最近的圓,從零開始」的行爲。 (另見:en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero) – jaggedjava

1

對於數字顯示,您應該打印兩位小數而不是一位。這可以用專門的格式化打印語句來完成。

"{:.2f}".format(7.1) # prints 7.10 

如果您擔心存在十進制不精確性,請查看decimal模塊。它提供了高達28位的精確度,並可用於可靠地打印出這些數字。

+0

是的,這確實是十進制模塊,解決了我的問題,謝謝你的提示。 – jaggedjava

相關問題