float浮点数运算的精度问题

python的float浮点数进行十进制的运算过程中,可能会遇到一些精度上的问题,比如下面的这个实例中,变量a为2.01,变量b为3.02,二者相加得到的值并不会是5.03,而是5.029999999999999,如下代码:

>>> a = 2.01
>>> b = 3.02
>>> a+b
5.029999999999999

float精度问题解决方法

python全栈编程:笨鸟工具,python全栈

python的decimal模块中的Decimal()方法可以用来解决float浮点数运算过程中的精度问题,需要注意的一点是,传入Decimal()方法中的参数应当为浮点数类型的字符串,比如"1.02",否则仍然会出现精度的问题,实例代码如下:

>>> import decimal
>>> decimal.Decimal(1.01) #如果是以浮点数为参数,返回值的精度如下
Decimal('1.0100000000000000088817841970012523233890533447265625')
>>> decimal.Decimal('1.01') #以字符串为参数
Decimal('1.01')
>>> decimal.Decimal('1.01')+decimal.Decimal('1.02') == decimal.Decimal('2.03')
True
>>> decimal.Decimal('1.01')+decimal.Decimal('1.02')
Decimal('2.03')