1

重複の可能性:
なぜ int exp1 = 14/20*100; になるのですか? Javaで「0」に等しい?

私はこれを使用しています:

int newWidth = Math.round(297 * (40 / 414));

コードでは、数字は実際には変数ですが、それらは保持していたものであり、コードを実行するnewWidthと 0 として返され、28 ま​​たは 29 を期待していました。ここで何が問題なのかわかりません...

4

9 に答える 9

9

40 / 4140整数でのみ機能するため、すぐに丸められます。オペランドの 1 つをdouble/にキャストするか、すぐにfloat使用する必要があります。double

int newWidth = (int)Math.round(297 * (40.0 / 414));

また:

int newWidth = (int)Math.round(297 * ((double)40 / 414));
于 2012-11-30T16:30:14.010 に答える
5

40/414に等しいので0、そう297*0 = 0そしてMath.round(0) = 0

代わりに double を使用してください。

于 2012-11-30T16:30:11.050 に答える
3

int newWidth = (int)Math.round(297 * (40d / 414));

于 2012-11-30T16:31:55.147 に答える
2

Javaのintは小数点以下を使用しません...したがって、これにはdoubleを使用する必要があります。() 内は 40/414 = 0 であるため、0 が返されます。

于 2012-11-30T16:31:11.293 に答える
2

への変更int newWidth = (int)Math.round(297 * (40.0 / 414));

于 2012-11-30T16:29:52.950 に答える
2

問題は 40/414 から始まります。これは、int を返す整数除算です。この場合: 0.

これを修正するには、これらの int の 1 つを double または float にキャストします (((float) 40 / 414) など)。

于 2012-11-30T16:32:17.927 に答える
1

の結果40/414はゼロです。これは整数除算の結果です。分子または分母のいずれかを浮動小数点値に変更して、目的の結果を取得します

于 2012-11-30T16:29:57.067 に答える
1

私の 2 セントを投入します...前述のように、問題は整数除算にあります。この除算で結果を double として扱うように強制する別の方法:

int newWidth = Math.round(297 * (40.0 / 414));
于 2012-11-30T16:42:55.543 に答える
0

40/414 は 0 に丸められます。

おそらくあなたが望むのは

int newWidth = (297 * 40) / 414;
于 2012-11-30T16:48:54.383 に答える