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 模块能很好地解决浮点类型数之间运算的问题

原文地址:https://www.cnblogs.com/ioan/p/13962659.html