5

次のコードがあります。

int i = (int) 0.72;
System.out.println(i);

次の出力が得られます。

0

変数には(since 0.72 > 0.5 => 1)iの値が必要だと想像しましたが、そうでないのはなぜですか?1

(int にキャストするときは、切り上げを考慮せずに、カンマの後の 10 進数を単純に切り取ると思います。そのため、おそらく自分で処理する必要がありますか?)

4

7 に答える 7

7

正解です。int にキャストすると、数値が切り捨てられます。次のようなことを行って、目的の結果を得ることができます。

int i = (int)Math.round(0.72);
System.out.println(i);

これは、たとえば、0.72 の場合は 1、0.28 の場合は 0 を出力します。

于 2012-12-21T09:54:56.370 に答える
3

double を int にキャストすると、小数部分が切り捨てられるため

UPDATEは、次Math.roundの代わりに目的の出力を提供しますMath.ceil

 System.out.println(Math.round(0.72));
// will output 1

 System.out.println(Math.round(0.20));
// will output 0

使用できますMath.ceil

System.out.println(Math.ceil(0.72));
// will output 1
 System.out.println(Math.ceil(0.20));
// will output 1
于 2012-12-21T09:53:53.567 に答える
1

int 暗黙にキャストすると、小数部分が削除されます。0 の後のすべてが削除されるため、0 を取得するのはそのためです (この場合は 72)。丸めたい場合は、Math.round(...)を見てください。

于 2012-12-21T09:54:17.910 に答える
1

明示的なキャストは、float/double 値を int 変数に変換します (小数部分は破棄されます)。

于 2012-12-21T09:55:31.993 に答える
1

Java は、私たちのように数値を四捨五入しません。単に小数部分を切り捨てます。数値を四捨五入する場合は、java.lang.Math を使用します

于 2012-12-21T09:55:33.193 に答える
1

にキャストdoubleするintと、数値の整数以外の部分が切り捨てられます。

説明したように数値を丸めるには、次を使用しますMath.round()

于 2012-12-21T09:55:45.643 に答える