次の行を使ってfloatをintに変換しましたが、私が望むほど正確ではありません。
float a=8.61f;
int b;
b=(int)a;
結果は次のとおりです。8
(9
であるはずです)
a = -7.65f
の場合、結果は-7
です(-8
であるはずです)。
最善の方法は何ですか?
Math.round()
を使うと、floatを最も近い整数に丸めます。
実際には、達成したい結果に応じて、floatをintに変換する方法はいくつかあります。(int i
の場合、float f
)
round(与えられたfloatに最も近い整数)
i = Math.round(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 3
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3
注:これは、契約上、(int) Math.floor(f + 0.5f)
と同じです。
切り捨てる(つまり、小数点以下のすべてを削除する)
i = (int) f;
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 2
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
ceil/floor(常に与えられた値よりも大きい/小さい整数の場合、小数部があります)
i = (int) Math.ceil(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 3 ; f = 2.68 -> i = 3
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
i = (int) Math.floor(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 2
f = -2.0 -> i = -2 ; f = -2.22 -> i = -3 ; f = -2.68 -> i = -3
positiveの値を丸めるために、(int)(f + 0.5)
を使うこともできます。これは(docの通り)それらのケースではMath.Round
と全く同じように動作します。
理論的には、丸めをするためにMath.rint(f)
を使用することができますが、rint
は0.5を切り上げず、切り上げまたは切り下げを行います。
見る
http://mindprod.com/jgloss/round.html
http://docs.Oracle.com/javase/6/docs/api/Java/lang/Math.html
詳細といくつかの例については。
Math.round(value)
は、値を最も近い整数に丸めます。
つかいます
1) b=(int)(Math.round(a));
2) a=Math.round(a);
b=(int)a;
入力後にMath.round(value)
を使用して整数にキャストします。
float a = 8.61f;
int b = (int)Math.round(a);
Math.roundは整数値も返すので、型キャストする必要はありません。
int b = Math.round(float a);
私にとっては簡単です: (int)(a + 5) // aはFloatです。丸めた値を返します。
Java Math.round()型には依存しない