web-dev-qa-db-ja.com

javaで2つの整数をdoubleに分割する

これは新しいプログラマーに共通の問題であることがわかりますが、コードのソリューションを実装することに成功しませんでした。基本的に、wとvを分割します。これらはdouble変数に保存する必要があります。しかし、[0.0、0.0、...、0.0]を出力します

public static double density(int[] w, int[] v){
double d = 0;
    for(L = 0; L < w.length; L++){
        d = w[L]  /v[L];
    }
    return d;
}
16
roarknuppel

この行はここd = w[L] /v[L];は数ステップにわたって行われます

d = (int)w[L]  / (int)v[L]
d=(int)(w[L]/v[L])            //the integer result is calculated
d=(double)(int)(w[L]/v[L])    //the integer result is cast to double

つまり、doubleにキャストする前に精度がすでになくなっているため、最初にdoubleにキャストする必要があります。

d = ((double)w[L])  / (int)v[L];

これにより、Java整数演算を使用するのではなく、二重演算を使用して、最後にdoubleにキャストすることが強制されます。

32
Richard Tingle

Actaully w[L]/v[L]ここでは両方とも整数であり、除算では精度が低下し、integer値に変換され、後者はintegerに変換されてdoubleに変換されます。

解決策は、オペランドまたは除数、あるいはその両方をダブルに変換することであり、除算操作は10進数値を生成します。

d = w[L]/(double)v[L];

次のように使用する

    d = (double) w[L]  /v[L];
2
stinepike