Java数学问题,结果不同!

时间:2010-11-06 20:55:00

标签: java math

为什么第一个和第一个1的结果不同?我猜它与Long类型的限制有关。

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);

谢谢!

2 个答案:

答案 0 :(得分:10)

因为在第一个中你用一个int划分,它被截断然后除以另一个int。

在第二个中,你只是用一个int来划分。

答案 1 :(得分:5)

第二个分母溢出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);
    }
}