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

これは整数除算によるものです。値の1つをにキャストしますdouble

例:

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

JLS15.17.2による

整数の除算は0に丸められます。つまり、2進数値昇格(§5.6.2)の後に整数であるオペランドnおよびdに対して生成される商は、| d・q|を満たしながら大きさが可能な限り大きい整数値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 に答える