整数除算: double を生成するにはどうすればよいでしょうか? 質問する

整数除算: double を生成するにはどうすればよいでしょうか? 質問する

このコードブロックの場合:

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 として正確に表現できます。

おすすめ記事