Java 用于循环变量数学不计算(z/loopLength*100)

Java 用于循环变量数学不计算(z/loopLength*100),java,math,for-loop,Java,Math,For Loop,我有一个奇怪的问题,我在for循环中的数学在最后一次迭代之前根本不会计算,在最后一次迭代中,它的计算结果是100%。我使用的公式是一个简单的百分比公式,用于计算到目前为止已处理了多少文件数组。我的代码如下: for(int z=0;z<theFiles.size();z++) { ... System.out.println(z); // Prints out the current iteration. System.out.println

我有一个奇怪的问题,我在for循环中的数学在最后一次迭代之前根本不会计算,在最后一次迭代中,它的计算结果是100%。我使用的公式是一个简单的百分比公式,用于计算到目前为止已处理了多少文件数组。我的代码如下:

    for(int z=0;z<theFiles.size();z++) {
    ...
        System.out.println(z); // Prints out the current iteration.
        System.out.println(theFiles.size()); // Prints out the length of the array (35 in my test sample).
        double test = Math.abs(z / theFiles.size() * 100); // Calculation to find the percentage of 100 the current iteration is (this is where things seem to break). Comes out as 0 if it's set as an int also.
        System.out.println(test); // Prints out the percentage complete for this iteration.
    }

对于(int z=0;z
z/theFiles.size()
而言,如果
z
两者都是int,则它们将始终为零。若要解决问题,请执行
(z*100)/theFiles.size()
或将z/theFiles.size()强制转换为双倍。

z/theFiles.size()
如果
z
因为两者都是整数。若要解决问题,请执行
(z*100)/files.size()
或将z强制转换为双精度。

这是由于整数除法。将其中一个值强制转换为双精度

例如:

double test = Math.abs((double)z / theFiles.size() * 100);
依照

整数除法向0舍入。也就是说,在二进制数字提升(§5.6.2)后为整数的操作数n和d生成的商是一个整数值q,其大小尽可能大,同时满足| d·q |≤ |n |。此外,当| n |时,q为正≥ |d |和n与d具有相同的符号,但当| n |时q为负≥ |d |和n以及d有相反的符号


这是由于整数除法造成的。将其中一个值强制转换为
double

例如:

double test = Math.abs((double)z / theFiles.size() * 100);
依照

整数除法向0舍入。也就是说,在二进制数字提升(§5.6.2)后为整数的操作数n和d生成的商是一个整数值q,其大小尽可能大,同时满足| d·q |≤ |n |。此外,当| n |时,q为正≥ |d |和n与d具有相同的符号,但当| n |时q为负≥ |d |和n以及d有相反的符号


太棒了!就是这样。太感谢了!@DGolberg:不客气了。很高兴它帮了你。如果它帮了你,别忘了接受答案。祝你好运!谢谢…一旦它让我接受了就行了,哈哈。反应如此之快,现在仍然不让我接受它…太棒了!就是这样。太感谢了!@DGolberg:不客气。太高兴了帮助。如果答案对你有帮助的话,别忘了接受。祝你好运!谢谢…一旦它让我接受就行了,哈哈。得到的回复太快了,现在仍然不让我接受…奇怪…使用计算器工作正常;会认为它在代码中工作相同。谢谢你的帮助!哎呀,希望我能将两个答案都设置为正确答案,因为它们都是错误的两个不同的答案都有效。很好,另一个答案似乎很完美。奇怪…使用计算器可以正常工作;在代码中也可以正常工作。谢谢你的帮助!呜呜,希望我能将两个答案都设置为正确答案,因为它们都不同,而且都有效。很好,另一个答案似乎很完美。