Python 2中浮点数运算异常:整数除法结果为0的问题求助
解决Python 2中整数除法得到0的问题
嘿,这个问题我太熟悉了——Python 2的整数除法特性确实坑过不少有经验的开发者!
问题根源
在Python 2中,当你用/运算符对两个整数进行除法运算时,它执行的是地板除法(也就是只保留商的整数部分,直接舍去小数)。比如你这里correct是133-136,total是199(或是你代码里打印的139),两者的商都是小于1的小数,整数除法后就直接得到0。而你尝试的float(correct/total)之所以没用,是因为它先执行了整数除法得到0,再把0转成float,结果自然还是0.0,顺序完全错了。
两种解决方案
1. 提前将其中一个操作数转为浮点数
只需要把correct或total中的任意一个先转成float,这样整个除法运算就会触发浮点除法,得到正确的小数结果:
print(correct) # 输出133-136 print(total) # 输出199(或139) print("Accuracy: ", float(correct)/total) # 或者写成 correct/float(total),效果完全一致
2. 导入division模块,让Python 2使用Python 3的除法规则
如果你的代码里有很多除法运算,不想每次都手动转float,可以在代码的最开头添加这一行:
from __future__ import division # 之后所有的/都会执行浮点除法,//才是地板除法 print("Accuracy: ", correct/total) # 直接得到正确的浮点数结果
这样就能得到你期望的0.66到0.97之间的准确率结果啦。
内容的提问来源于stack exchange,提问作者Asim




