本来想用python 的math.ceil()来做小数点取整,但发现有时候明明可以整除的数,但计算出来会出现小数点,导致出结果异常。麻烦大佬来解析下原因 和解决方法 ,谢谢
a = math.ceil((0.55-0.1)/0.03)
b = ((0.55-0.1)/0.03)
print(a) # # output: 16 (正常输出应该是15)
print(b) # output: 15.000000000000004
print(0.45/0.03) # output: 15.000000000000002
这是因为浮点数实际上是用二的幂数和小数逼近的,实际上浮点数是有精度的,难免的有很小的误差。要是想避免这个问题,可以对数据的小数点位数做限制。
可以改成:
a = math.ceil(round((0.55-0.1)/0.03,4))
从而忽略掉精度导致的尾数。
可能是因为 是浮点数的计算吧
浮点数 除以 浮点数 结果还是浮点数 能整除 也是浮点数
浮点数存在精度误差
https://www.cnblogs.com/luhuan/p/11161172.html
0.1在十进制中是有限的,但是二进制里是无限循环小数
好比1/3=0.1(三进制),但是在10进制无法精确表示一样的道理。
这是因计算机使用二进制来处理浮点数的时候会有误差,你可以使用decimal模块来实精确计算