python在取round的时候会出现问题
round(2.675, 2)
# 结果:2.67
这种误差还会体现在乘法中,下面这个是最近遇到的:
0.596*100
# 结果:59.599999999999994
0.796*100
# 结果:79.60000000000001
本质上的原因:官方文档里有说明
其实就是十进制的数字在底层都是用二进制模拟的,而二进制无法精确到真实值,只能无限逼近
如0.1对应的真实值是:
>>> 0.1
0.1000000000000000055511151231257827021181583404541015625
而这样也会出现一些明显的问题:
>>> 0.1 + 0.1 + 0.1 == 0.3
False
这些问题无法避免,只能绕一下
>>> round(0.1 + 0.1 + 0.1, 16) == round(0.3, 16)
True
>>> round(0.1 + 0.1 + 0.1, 17) == round(0.3, 17)
False
当然了大部分是正常的
>>> 0.1 + 0.1 == 0.2
True
>>> 0.1 + 0.1 + 0.1 + 0.1 == 0.4
True