Các dài x
bạn đang tạo không phải là giá trị mà bạn mong đợi. Nó nằm trong phạm vi số nguyên. Để tạo chờ đợi, sử dụng:
final long x = 24L*60L*60L*1000L*1000L;
final long y = 24L*60L*60L*1000L;
System.out.println(x/y);
Các x
bạn tính toán, trong phạm vi số nguyên, là 500654080
. Điều này chia cho y
(= 86400000
), dẫn đến 5.794607407407407...
. Java cắt ngắn phần thập phân gây ra số 5.
Bằng cách thêm L
sau chữ số, bạn yêu cầu trình biên dịch biên dịch nó dưới dạng long
thay vì int
. Giá trị cho x
bạn mong đợi là 86400000000
. Nhưng được biên dịch như một int.
Chúng ta có thể tái tạo các giá trị sai cho x
(500654080
) bằng cách cắt xén nó đến một int:
// First correct
long x = 24L*60L*60L*1000L*1000L;
/* x = `86400000000`; */
// Now truncate
x &= 0xFFFFFFFFL; // again: don't forget the L suffix
/* x = `500654080` */
Nguồn
2011-07-20 17:47:23
http://ideone.com/z78Sg –
http: // ideone.com/3vygF –