2012-04-03 40 views
6

Đang sử dụng Math.round và tôi thấy rằng nó sẽ không trả lại bất kỳ giá trị nào lớn hơn sau đó (2^32/2) -1, nhưng tài liệu cho biết nó có thể/sẽ trả về giá trị dài, tức là 2^64 ... Có đoạn mã bên dưới.Giá trị trả về Math.round MAX

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

đó sản lượng:

2147483647 
9223372036854775807 

Tôi có thiếu cái gì?

Trả lời

11

Gọi điện thoại là quá tải Math.round() mất float và trả lại int. Xem the javadoc.

Hãy thử:

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

Chỉ cần thêm một số thông tin về những gì đang thực hiện: http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls- 5.1.2 Theo mặc định có một mở rộng từ dài đến nổi. Để thực thi hành vi với gấp đôi, nó phải được đúc. –

Các vấn đề liên quan