除法给出0循环,为什么?

时间:2016-10-03 11:31:29

标签: python-2.7 printing iteration

下面的代码给出了每20次迭代的0%,而不是我希望它显示的实际百分比。

n=100
for i in range(n):
    if i% 20 ==0:
        print str(i/n*100) + '%, Progress'

结果:

0%, Progress
0%, Progress
etc.....

我必须遗漏一些非常简单的事情。谢谢。

4 个答案:

答案 0 :(得分:1)

将除法更改为i /(float)n * 100,以便python解释器将结果输出格式化为小数点。

答案 1 :(得分:1)

除法自动向下舍入到最接近的整数。 你的代码中会发生什么: 我= 20 n = 100

i / n = 20/100,变为0。 然后(i / n)* 100 = 0 * 100 = 0。 您可以通过首先将i乘以100然后除以n来解决此问题: 我* 100 / N

答案 2 :(得分:1)

n=100 for i in range(n): print(i); if i% 20 ==0: print str((float(i)/float(n))*100) + '%, Progress'

对于python i / n是根据你的变量声明的(int)/(int)。所以我试图给i / n一个总是0的int答案。

答案 3 :(得分:0)

在每次迭代中,i/n*100向下舍入到最接近的整数(这就是除法运算符在python2中对整数进行处理的方式)。

您可以使用显式投射float()或预先执行from __future__ import division。这将阻止除法运算符自动向下舍入。

Here您可以找到类似问题的详细说明。