double[] arrayName = new double[10];
arrayName[0] = (14/49)*100;
14/49の2つの数値のパーセンテージを取得し、結果を配列に追加しようとしています。返されるのは0.0だけです。 doubleの代わりにfloatを使用しても同じです。 Javaは初めてです。
int
sをdouble
にキャストするか、double
sを使用します。
例えば:
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です。