Python类变量运算结果始终为零?类方法调试疑问
问题原因:整数除法导致计算结果始终为0
这个问题是很典型的整数除法行为引发的坑!
你代码里的n和self.nbands都是整数类型,在Python 2环境中,两个整数使用/运算符会执行整数除法——也就是直接舍弃小数部分,只保留商的整数部分。而你的n是通过range(self.nbands)循环的,取值范围是0到self.nbands-1,所以n永远小于self.nbands,n / self.nbands的结果必然是小于1的小数,经过整数除法截断后就会变成0。
如果是在Python 3环境中,/默认是浮点除法,但如果代码里误写了//(整数除法运算符),也会出现同样的问题,不过看你的代码用的是/,大概率是Python 2环境的问题。
解决方法
这里有几个简单的修复方案:
强制浮点运算:把其中一个操作数转换成浮点数,触发浮点除法逻辑:
print("Currently overlapping n: " + str(n) + ". k: " +str(k) +". n': " + str(n_prim) + "\t" +str(float(n)/self.nbands) + " percent completed.")更推荐用f-string让代码更易读:
progress = float(n) / self.nbands * 100 # 直接计算百分比数值 print(f"Currently overlapping n: {n}. k: {k}. n': {n_prim}\t{progress:.2f} percent completed.")切换到Python 3除法规则(仅Python 2适用):在代码文件最顶部添加导入语句,让
/默认执行浮点除法:from __future__ import division整数运算计算百分比:如果不想用浮点数,可以用乘法优先的方式避免精度丢失:
progress = (n * 100) // self.nbands
修改后就能看到正确的进度数值啦。
内容的提问来源于stack exchange,提问作者Joshua Salazar
相关产品推荐
相关产品推荐

