[Python] 數值取位Round與精確計算Decimal

為什麼你需要少看垃圾博客以及如何在Python裡精確地四捨五入
https://segmentfault.com/a/1190000018717895

Python 3裡面,因為在電腦裡面,小數不是都為精確的,例如1.115在電腦中實際上是1.1149999999999999911182,所以當你對這個小數精確到小數點後兩位的時候,實際上小數點後第三位是4,所以四捨五入,因此結果為1.11。

另外round對小數的精確度採用了四舍六入五成雙的方式。

如果要實現我們數學上的四捨五入,那麼就需要使用decimal模組。

注意Decimal接收的參數除了字串,也可以是浮點數。不過,為什麼浮點數11.245和字串'11.245',傳進去Decimal以後結果不一樣,這是因為傳入的參數為浮點數,並且這個浮點值在電腦裡面不能被精確存儲,那麼它會先被轉換為一個不精確的二進位值,然後再把這個不精確的二進位值轉換為等效的十進位值。

對於不能精確表示的小數,當傳入Decimal的時候,Python在拿到這個數前,這個數就已經被轉成了一個不精確的數了。所以你雖然參數傳入的是11.245,但是Python拿到的實際上是11.244999999999...。

所以一旦要做精確計算,那麼就不應該再單獨使用浮點數,為防止精度丟失,而應該用Decimal('浮點數'),以字串方式輸入Decimal。


#Python, Decimal, Round, 四捨五入, 四捨六入五成雙

留言