目录
1、变量与数据类型
1.1 对浮点型数据执行精确运算
2、函数方法
2.1 round()方法
在python中进行浮点数计算时会出现计算结果与数学计算结果不一致的情况,如:
print(0.35+0.3+0.35) 输出:0.9999999999999999 print(0.3+0.3+0.3) 输出:0.8999999999999999这是因为一些较为简单的浮点数在计算机内部转化为二进制的时候会变为无限循环小数,计算机会进行四舍五入,导致再转化为十进制时,会出现精度丢失的情况。
可以使用decimal模块下的Decimal方法来对这个问题进行解决,在对浮点数进行计算的时候可以得到精确的结果。
from decimal import * print(Decimal('0.3')+Decimal('0.3')+Decimal('0.35')) 输出:1.00并且它还可以和计算数据的精度进行匹配。
采用普通浮点数计算:
print(2.20+1.80) 输出:4.0采用Decimal方法:
from decimal import * print(Decimal('2.20')+Decimal('1.80')) 输出:4.00Decimal方法可以根据需要,搭配getcontext().prec函数设置数据的有效数字。其用法为getcontext().prec=x,x为想要的精度,如x=3,代表我想要得到保留3位有效数字的结果。
from decimal import * getcontext().prec=4 print(Decimal(2.20)+Decimal(1.80)) 输出:4.000需要注意的是:Decimal方法中建议传入字符串形式的浮点数,如果直接传入浮点数结果往往依然不精确:
from decimal import * print(Decimal(2.20)+Decimal(1.80)) 输出:4.000000000000000222044604925round函数用于对数值进行四舍五入:
a=0.846 print(round(a)) 输出:1同时,还可以指定小数保留的位数,round(a,x)表示可以对a保留x位的小数,如果a不足x位小数,则对a保持不变:
a=0.846 b=0.5 print(round(a,2)) print(round(a,5)) print(round(b,2)) 输出: 0.85 0.846 0.5