このコードブロックの場合:
int num = 5;
int denom = 7;
double d = num / denom;
の値はd
です0.0
。キャストすることで強制的に動作させることができます:
double d = ((double) num) / denom;
しかし、正しい結果を得る別の方法はありますかdouble
? プリミティブをキャストするのは好きではありません。何が起こるかわかりません。
ベストアンサー1
double num = 5;
これでキャストは回避されます。しかし、キャスト変換は明確に定義されていることがわかります。推測する必要はありません。JLS. intからdoubleへの変換は拡大変換です。§5.1.2:
拡大プリミティブ変換では、数値の全体的な大きさに関する情報は失われません。
[...]
int または long 値を float に変換するか、long 値を double に変換すると、精度が失われる可能性があります。つまり、結果の値の最下位ビットの一部が失われる可能性があります。この場合、結果の浮動小数点値は、IEEE 754 の最も近い値への丸めモードを使用して、整数値を正しく丸めたバージョンになります。(§4.2.4)。
5 は double として正確に表現できます。