python中执行精确小数的计算
在进行浮点数计算时它们无法精确表达出所有的十进制小数位。
a = 4.1
b = 5.329
print(a+b)
9.428999999999998
这些误差实际上是底层CPU的浮点运算单元和IEEE754浮点数算数标准的一种“特性”。python的浮点数类型保存的数据采用的是原始表示形式,因此使用float实例时就不能避免这样的误差。
我们可以使用decimal模块避免这种操作(如果不介意牺牲下性能):
from decimal import Decimal
a = Decimal('4.1')
b = Decimal('5.329')
print(a+b)
9.429
注意Decimal的参数必须是字符串,不能是浮点型,否则误差依旧存在。