2

float または double 値にフロア関数を適用して整数を取得する方法。関数から double Value:4.4497083717E10 float Value:4.4497084E10 を得ました。 floor が整数になる可能性はありますか??

4

2 に答える 2

4

.floorが整数になる可能性はありますか?

タイプの観点から-いいえ。 Math.floorはを返すように宣言されているdoubleため、静的タイプが。であるものを返すことはありませんint

とはいえ、メソッドのドキュメントでは、戻り値が整数に等しいと宣言されています。したがって、返された結果をにキャストするだけで、int常に期待どおりの出力が得られます。

(つまり、結果が範囲内にあると仮定します。Aは、が表すことができるdoubleより大きな数値を保持できます。技術的な詳細については、プリミティブ変換の絞り込みを確認してください。境界を確認して、データをチェックして、変換が常に適切であることを確認してください。)intint

于 2012-04-20T09:42:21.677 に答える
1

4.4497083717E10 は にするには大きすぎるため、intにキャストする必要がありますlong

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

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

と同じです

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
于 2012-04-20T11:11:02.557 に答える