2012-04-03 19 views
6

Math.Round kullanıyor muyum ve bunu daha sonra (2^32/2) -1 herhangi bir değer daha büyük me döndürmez olduğunu bulma yaşıyorum ama dokümantasyon o/uzun değerleri dönecektir olabilir devletler Yani 2^64 ... Aşağıda bir kod parçacığı var.Math.round MAX depozitolu değeri

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

hangi çıkışı:

2147483647 
9223372036854775807 

Ben bir şey eksik?

cevap

11

Bir float alan ve int değerini döndüren Math.round() aşırı yüklenmesini çağırıyor. Bakınız the javadoc.

Dene:

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

Sadece yapılır ilgili bazı bilgileri eklemek için: http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls- 5.1.2 Varsayılan olarak, uzuntan şamandıraya genişleme vardır. Davranışı iki katına çıkarmak için, o döküm edilmek zorundadır. –