Długa x
tworzysz nie jest wartością oczekiwano. Jest w zakresie całkowitym. Aby utworzyć tęskni, przeznaczenie:
final long x = 24L*60L*60L*1000L*1000L;
final long y = 24L*60L*60L*1000L;
System.out.println(x/y);
x
ty komputerowej, w zakresie liczb całkowitych, był 500654080
. To podzielone przez y
(= 86400000
), daje w wyniku 5.794607407407407...
. Java obcina część dziesiętną, która powoduje 5.
Dodając L
po numerze dosłowne, poinformować kompilator skompilować go jako long
zamiast int
. Wartość oczekiwana dla x
to 86400000000
. Ale został skompilowany jako int.
Możemy odtworzyć niewłaściwą wartość dla x
(500654080
) przez odcięcie go do 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` */
http://ideone.com/z78Sg –
http: // ideone.com/3vygF –