python float运算时存在浮点误差,结果小数点带.00002及解决方法
背景:
返回一个json字符串,result结果里面嵌套多个内容一样,只有具体数据不一样的列表[字典],现在需要从里面取指定的key值,来计算最后的总额。
原来使用的类型,float
通过取到json字符串里面的values,然后转化成float,遇到一个问题,最后相加的总额出现了:1167.5300000000002,计算得出的金额多出了00000000002
原因:
在python中浮点数计算是不精确的的,这是因为小数以二进制形式表示时的有穷性导致的,计算机进行浮点运算时的浮点误差
解决方案:
使用decimal模块,进行替换
sum_payment = 0 for i in res_json[res_key]: pay_ment = jsonpath.jsonpath(i, path) # float(payment[0]): 计算机进行浮点运算时的浮点误差,改用decimal,decimal(只能传入int和str,不能传float) res_payment = Decimal(str(pay_ment[0])) sum_payment += res_payment