web-dev-qa-db-ja.com

Javaでfloatをintに変換する方法

次の行を使ってfloatをintに変換しましたが、私が望むほど正確ではありません。

 float a=8.61f;
 int b;

 b=(int)a;

結果は次のとおりです。89であるはずです)

a = -7.65fの場合、結果は-7です(-8であるはずです)。

最善の方法は何ですか?

310
Frank

Math.round()を使うと、floatを最も近い整数に丸めます。

628
tw39124

実際には、達成したい結果に応じて、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

詳細といくつかの例については。

177
vaxquis

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);
5

Math.roundは整数値も返すので、型キャストする必要はありません。

int b = Math.round(float a);
5
venkat

私にとっては簡単です: (int)(a + 5) // aはFloatです。丸めた値を返します。

Java Math.round()型には依存しない

0
Bruno L.