由於二進制對浮點運算存在精度問題,所以一些浮點計算經常會出現以下情況:
1 # -*- coding: utf-8 -*- 2 3 a = 1 4 b = 0.9 5 print(a-b)
結果:
0.09999999999999998
我們期望的結果應該是0.1。為了解決這個問題,可以引入python的decimal庫:
1 # -*- coding: utf-8 -*- 2 3 from decimal import getcontext, Decimal 4 5 getcontext().prec = 10 6 a = 1 7 b = 0.9 8 print(Decimal(a)-Decimal(b))
結果:
0.1000000000
getcontext().prec = 10把精度設置為10位,注意不是小數點后的位數,而是整個數字的位數。如果需要去掉后面的0,需要用float()轉換一下。在具體的計算中,還需要用Decimal包裝計算的所有數字。