次のコードがあります。
int i = (int) 0.72;
System.out.println(i);
次の出力が得られます。
0
変数には(since 0.72 > 0.5 => 1)i
の値が必要だと想像しましたが、そうでないのはなぜですか?1
(int にキャストするときは、切り上げを考慮せずに、カンマの後の 10 進数を単純に切り取ると思います。そのため、おそらく自分で処理する必要がありますか?)
次のコードがあります。
int i = (int) 0.72;
System.out.println(i);
次の出力が得られます。
0
変数には(since 0.72 > 0.5 => 1)i
の値が必要だと想像しましたが、そうでないのはなぜですか?1
(int にキャストするときは、切り上げを考慮せずに、カンマの後の 10 進数を単純に切り取ると思います。そのため、おそらく自分で処理する必要がありますか?)
正解です。int にキャストすると、数値が切り捨てられます。次のようなことを行って、目的の結果を得ることができます。
int i = (int)Math.round(0.72);
System.out.println(i);
これは、たとえば、0.72 の場合は 1、0.28 の場合は 0 を出力します。
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
int 暗黙にキャストすると、小数部分が削除されます。0 の後のすべてが削除されるため、0 を取得するのはそのためです (この場合は 72)。丸めたい場合は、Math.round(...)を見てください。
明示的なキャストは、float/double 値を int 変数に変換します (小数部分は破棄されます)。
Java は、私たちのように数値を四捨五入しません。単に小数部分を切り捨てます。数値を四捨五入する場合は、java.lang.Math を使用します
にキャストdouble
するint
と、数値の整数以外の部分が切り捨てられます。
説明したように数値を丸めるには、次を使用しますMath.round()