0

我有一个奇怪的问题,我在 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.
    }

任何人都知道为什么变量“test”不断出现 0.0?我记得在 JavaScript 中遇到过与此类似的问题,但我不确定如何在 Java 中修复它并且忘记了我在 JS 中是如何做到的。

4

2 回答 2

2

这是由于整数除法。将其中一个值转换为double

例子:

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

根据JLS 15.17.2

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

于 2012-12-29T05:57:58.837 回答
1

z / theFiles.size()z < theFiles.size()如果两者都是 int,则将始终为零。要解决您的问题,请执行(z *100) /theFiles.size()或将 z 转换为 Double。

于 2012-12-29T05:57:33.190 回答