double[] arrayName = new double[10];
arrayName[0] = (14/49)*100;
2 つの数値 14/49 のパーセンテージを取得し、結果を配列に追加しようとしています。返されるのは 0.0 だけです。double の代わりに float を使用する場合も同じです。Java 初心者。
int
s をにキャストするかdouble
、単に s を使用しますdouble
。
例えば:
double[] arrayName = new double[10];
resultValue[0] = (14.0/49.0)*100;
また:
double[] arrayName = new double[10];
resultValue[0] = ((double)14/49)*100;
見方:
(double/double)*double
JVM がそれをどのように認識するか
(int/int)*int
JLSから。int から double への変換は拡大変換です。§5.1.2から:
拡大プリミティブ変換では、数値の全体的な大きさに関する情報が失われません。
[...]
int または long 値を float に、または long 値を double に変換すると、精度が失われる可能性があります。つまり、結果は値の最下位ビットの一部を失う可能性があります。この場合、結果の浮動小数点値は、IEEE 754 の最も近い値への丸めモード(§4.2.4)を使用して、整数値を正しく丸めたバージョンになります。
それらの1つを二重リテラルに置き換えると(それらの.0
1つを追加またはキャストするなど) double
、期待する結果が得られるはずです。
このような:
arrayName[0] = (14/49)*100.0; // put ".0" after any of the numbers
またはこれ:
arrayName[0] = (double)(14/49)*100;
値の少なくとも 1 つは次のようにする必要がありますdouble
。
double[] arrayName = new double[10];
arrayName[0] = (14d/49d)*100;
// or...
// arrayName[0] = (14d/49)*100;
// or...
// arrayName[0] = (14/49d)*100;
// or...
// arrayName[0] = (14.0/49)*100;
// or...
// arrayName[0] = (14/49.0)*100;
// or...
// arrayName[0] = (14/(double)49)*100;
// or...
// arrayName[0] = ((double)14/49)*100;
// or...
// arrayName[0] = ((double)14/(double)49)*100;
他の多くの人が指摘しているように、定数をdoubleとして設定する必要があります。
arrayName[0] = (14*100)/49.0;
このようにして、最後の計算のみを最初の計算ではなくdoubleに変換し、浮動小数点計算の数を減らします。
ところで、必要に応じて、順序を入れ替えて除算の前に乗算を使用するのと同じ方法を使用して、結果を整数にすることもできます。たとえば、(14/49)*100の代わりに14*100/49を使用します。