>>> 0.1+0.2
0.30000000000000004
>>> 0.1+0.1-0.2
0.0
>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
>>> 0.1+0.1+0.1-0.2
0.10000000000000003
0.1(10)=0.00011001100110011...(2)
可以看到,結果是無限迴圈的,也就是說,0.1 轉換成二進位制數後,無法精確到等於十進位制數的 0.1。同時,由於計算機儲存的位數是有限制的,所以如果要儲存的二進位制位數超過了計算機儲存位數的最大值,其後續位數會被捨棄(捨棄的原則是“0 捨 1 入”)。明白了問題產生的原因之後,那麼該如何解決呢?就 Python 的浮點數運算而言,大多數計算機每次計算誤差不會超過 253,這對於大多數任務來說已經足夠了。這種問題不僅在 Python 中存在,在所有支援浮點數運算的程式語言中都會遇到,它不光是 Python 的 Bug。
#使用模組前,需要使用 import 引入 import decimal a = decimal.Decimal("10.0") b = decimal.Decimal("3") print(10.0/3) print(a/b)執行結果為:
3.3333333333333335
3.333333333333333333333333333
#引入 decimal 模組 from fractions import Fraction print(10/3) print(Fraction(10,3))執行結果為:
3.3333333333333335
10/3
本節涉及到了有關模組的使用,讀者不用研究細節,會用即可,後續章節會詳細介紹模組。