为什么第一个和第一个结果会有所不同?我猜它必须处理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