2012-04-03 3 views
6

Math.roundを使用していますが、それは私に大きな値(2^32/2)-1を返さないことが分かっていますが、つまり2^64 ...下にコードスニペットがあります。Math.round MAX返される値

long bTmp = (long)Math.round(4294967296L); 
System.out.println(bTmp); 
System.out.println(Long.MAX_VALUE); 

どの出力:

2147483647 
9223372036854775807 

私は何かが足りないのですか?

答えて

11

Math.round()のオーバーロードはfloatになり、intを返します。 the javadocを参照してください。

試してみてください。

Math.round((double) 4294967296L) 
+2

だけで行われているものにいくつかの情報を追加します:http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls- 5.1.2デフォルトでは、longからfloatへの拡大があります。ダブルでビヘイビアを実行するには、キャストする必要があります。 –