1. 程式人生 > >Python程式設計:使用decimal定點數計算0.1+0.2

Python程式設計:使用decimal定點數計算0.1+0.2

浮點型加法

0.1+0.2
Out[15]: 0.30000000000000004

decimal定點數加法

import decimal

decimal.Decimal(0.1) + decimal.Decimal(0.2)
Out[17]: Decimal('0.3000000000000000166533453694')

# 設定精度
decimal.getcontext().prec = 6

decimal.Decimal(0.1) + decimal.Decimal(0.2)
Out[20]: Decimal('0.300000')

decimal傳入浮點型計算

from decimal import *

d1 = Decimal(
0.1) + Decimal(0.2) print(d1) # 0.3000000000000000166533453694 d2 = Decimal.from_float(0.1) + Decimal.from_float(0.2) print(d2) # 0.3000000000000000166533453694 # 格式化 print(d1.quantize(Decimal("0.00"))) # 0.30 print(d2.quantize(Decimal("0.00"))) # 0.30

定點數傳入字串做計算

d3 = Decimal("0.1") + Decimal("0.2")
print(d3)
# 0.3

可以看到:

  • 浮點數本身計算的時候是不準確的,
  • 即便轉換為decimal之後也不準確,
  • 比較好的方法是通過傳入字串做計算

參考

  1. decimal — Decimal fixed point and floating point arithmetic¶
  2. decimal模組