爲什麼第一個和第一個結果會有所不同?我猜它必須處理Long類型的限制。Java數學問題,結果不同!
long seconds = System.currentTimeMillis();
long first = (seconds/(1000*60*60*24))/365;
long first1 = seconds/(1000*60*60*24*365);
System.out.println(first);
System.out.println(first1);
謝謝!
爲什麼第一個和第一個結果會有所不同?我猜它必須處理Long類型的限制。Java數學問題,結果不同!
long seconds = System.currentTimeMillis();
long first = (seconds/(1000*60*60*24))/365;
long first1 = seconds/(1000*60*60*24*365);
System.out.println(first);
System.out.println(first1);
謝謝!
第二個分母的分母溢出int
類型。
沒有區別,如果你不喜歡這樣 - 使用長全:
public class Overflow
{
public static void main(String[] args)
{
long seconds = System.currentTimeMillis();
long first = (seconds/(1000L * 60L * 60L * 24L))/365L;
long i = 1000L * 60L * 60L * 24L * 365L;
long first1;
first1 = seconds/i;
System.out.println(i);
System.out.println(Integer.MAX_VALUE);
System.out.println(first);
System.out.println(first1);
System.out.println(first1/first);
}
}
它因爲在第一個你除以int,它被截斷,然後除以另一個int。
在第二個,你只是除以int。
正確,截斷。 – 2010-11-06 21:00:03
太好了,謝謝! – Mark 2010-11-06 21:02:17
我要給出這個答案,因爲你的例子給我展示了一些我不知道的新東西(L後綴)。謝謝! – Mark 2010-11-06 21:11:04
夠公平:) :) – 2010-11-06 21:14:04
@Steve,這是正確的答案。整數除法會改變結果,但在這種情況下不足以影響最終的截斷值。溢出(我之前錯過的)是真正的問題。 – 2010-11-06 21:14:22