395

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

 float a=8.61f;
 int b;

 b=(int)a;

結果は:(8あるべきです9

の場合a = -7.65f、結果は次の-7ようになります:(あるはずです-8

それを行うための最良の方法は何ですか?

4

9 に答える 9

750

を使用Math.round()すると、floatが最も近い整数に丸められます。

于 2009-08-18T17:41:55.913 に答える
196

実際には、達成したい結果に応じて、floatをintにダウンキャストするさまざまな方法があります:( intiの場合、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
    

の値を丸める場合は、を使用することもできます。これは、これらの場合(int)(f + 0.5)とまったく同じように機能Math.Roundします(ドキュメントによる)。

を使用Math.rint(f)して、最も近い偶数の整数に丸めることもできます。小数部が厳密に.5に等しい多くのフロートを処理することを期待し(IEEEの丸めの問題の可能性に注意)、セットの平均を所定の位置に維持したい場合は、ほぼ間違いなく便利です。ただし、別のバイアスを導入します。このバイアスでは、奇数よりも偶数の方が一般的です。

見る

http://mindprod.com/jgloss/round.html

http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html

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

于 2012-03-19T16:01:32.273 に答える
16

Math.round(value)値を最も近い整数に丸めます。

使用する

1) b=(int)(Math.round(a));

2) a=Math.round(a);  
   b=(int)a;
于 2012-11-29T06:57:33.533 に答える
7

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

int b = Math.round(float a);
于 2015-03-04T01:57:04.417 に答える
6

Math.round(value)型キャスト後に整数にキャストしてから使用します。

float a = 8.61f;
int b = (int)Math.round(a);
于 2014-12-29T10:18:02.343 に答える
5

プリミティブをコンストラクターにFloat渡してオブジェクトをインスタンス化し、作成したオブジェクトを使用してプリミティブを返します。floatFloatint

説明
数値ラッパークラスはクラスを拡張するため、メソッドを使用して、任意の数値ラッパーオブジェクトに他の数値プリミティブ型を返すようjava.lang.Numberにすることができます。.<type>Value()

手順

  1. Floatオブジェクトを作成します
  2. このメソッドを使用して.intValue()、プリミティブを返しintます。

Float mFloat = Float.valueOf(8.65f);
int i = mFloat.intValue();
于 2021-07-13T05:08:52.490 に答える
3

Math.round()で十分です

int b = Math.round(a)

これは仕事をします

于 2021-03-16T17:06:52.123 に答える
1

浮動小数点値を整数値に変換する場合は、浮動小数点値をどのように丸めるかに応じて、いくつかの方法があります。

最初の方法は、浮動小数点値を四捨五入することです。

float myFloat = 3.14f;
int myInteger = (int)myFloat;

myFloat値が4に近い場合でも、このコードの出力は3になります。

2番目の方法は、float値を丸めることです。

float myFloat = 3.14f;
int myInteger = Math.ceil(myFloat);

丸めモードは常に最大値を探しているため、このコードの出力は4になります。

于 2020-07-02T19:41:13.807 に答える
-1

私の場合、簡単です:(int)(a +.5) //aはFloatです。四捨五入された値を返します。

Java Math.round()タイプに依存しません

于 2018-01-22T00:21:18.237 に答える