python浮点数精度问题
python浮点数的计算,结果并不像我们想象的那样,比如:
>>> 0.25+0.25-0.4
0.09999999999999998
>>> 0.6+0.3-0.26
0.6399999999999999
在计算机上面运算的结果是我们实际期望的结果并不一致,导致这样的根本原因就是: 计算机 十进制与二进制之间的转换
计算机只认识二进制,十进制之间的运算,需要将十进制转换为二进制在进行二进制之间的运算
python中有两种方法可以解决浮点数精度问题
第一种: 使用decimal模块
>>> import decimal
>>> a= decimal.Decimal('0.25')
>>> b= decimal.Decimal('0.25')
>>> c= decimal.Decimal('0.4')
>>> print(a+b-c)
0.10
可以看到,相比普通运算的结果,使用 decimal 模块得到的结果更精确。
第二种: fractions 模块
>>> from fractions import Fraction
>>> 10/3
3.3333333333333335
>>> print(Fraction(10,3))
10/3
可以看出,通过 fractions 模块能很好地解决浮点类型数之间运算的问题