私はいくつかの非常に紛らわしい問題を抱えています..いくつかのものを計算したいのですが、いくつかのデバッグの後、Javaがこの算術演算を計算することがわかりました: 2 / 4 = 0.0しかし、それは0.5でなければなりません
2 と 4 は整数変数に格納され、結果は double 型に格納されます。
私は明らかに何かを逃しましたか?
私はいくつかの非常に紛らわしい問題を抱えています..いくつかのものを計算したいのですが、いくつかのデバッグの後、Javaがこの算術演算を計算することがわかりました: 2 / 4 = 0.0しかし、それは0.5でなければなりません
2 と 4 は整数変数に格納され、結果は double 型に格納されます。
私は明らかに何かを逃しましたか?
これは整数除算によるものです (整数除算は 0 に向かって丸められます)。オペランドの 1 つを double 型にキャストします。
例:
double temp = (double)2/4
正しい結果が得られます。
使用する
myDouble = (double) integerWhoseValueIs2 / integerWhoseValueIs4
double に格納するという事実は、2 つの整数の除算が整数になるという事実を変更しません。貯めてからでは遅いです。
Java言語仕様から:
整数除算は 0 に向かって丸められます。つまり、2 進数値昇格 (§5.6.2) 後の整数であるオペランド n と d に対して生成される商は、|d · q| を満たしながら、その大きさができるだけ大きい整数値 q です。≤ |n|。
へのキャストを記述しない場合double
、結果は常にint
.
double a = (double) 2/4;