2012-04-20 6 views
2

フロート関数をfloatに適用する方法、または整数を取得するためにdouble値を使用する方法。ダブル値を取得する方法:4.4497083717E10 浮動小数点:4.4497084E10浮動小数点:floor値をdouble :4.4497083717E10フロートのフロア:4.4497084416E10.フロアの結果は整数になる可能性がありますか?floatとdouble値のフロア関数

+0

と同じです。 –

+0

@MarkoTopolnikなぜ整数値を表すことが保証されている浮動小数点数を丸めたいのですか? –

+0

@ChristianRau 'long'が必要なので、' round'が返します。 'double'は決して"整数 "を表すことはなく、それはそれを近似するだけです。 Andrzej Doyleの答えで説明されているように、代替案は単純に「長い」形にキャストすることです。結果はまったく同じで、違いはあなたの味だけで、あなたにとってはよりクリーンなものです。 –

答えて

4

。床が整数になる可能性がありますか?

タイプの観点から - いいえ。 Math.floordoubleを返すと宣言されているので、静的型のintを返すことはありません。つまり、メソッドのドキュメントでは、が整数でに等しいことが宣言されています。返された結果をintにキャストするだけで、いつも期待した結果が得られます。

(それはあなたの結果が範囲内にあると仮定すると、である。doubleintを表すことができ、より大きな数字を保持することができます。技術的な詳細についてNarrowing primitive conversionsをチェックしてください。あなたはそれが常に賢明です保証するために、境界チェックあなたのデータにしたいことintに変換。)

1

4.4497083717E10あなたはlongにキャストしなければならないint、あるには余りにも大きいです。

long型にキャストするとdouble型の全体が保持され、long型で表現できる値はMath.floorと同じになります。すなわち

long l = (long) Math.floor(4.4497083717E10); 

は、あなたが `` floor`後round`を適用する必要があります

long l = (long) 4.4497083717E10; 

System.out.println((int) Math.floor(4.4497083717E10)); 
System.out.println((long) Math.floor(4.4497083717E10)); 
System.out.println((long) 4.4497083717E10); 

プリント

2147483647 -- due to an overflow 
44497083717 
44497083717 
関連する問題