Java部门返回错误的结果

public static void main(String[] args) { final long a= 24 * 60 * 60 * 1000 * 1000; final long b= 24 * 60 * 60 * 1000; System.out.println(a/b); } 

它应该返回1000,但返回5为什么?

24 * 60 * 60 * 100086400000 。 如果将它乘以1000 ,它将溢出int类型(因为int可以容纳的最大值是2147483647 ,这远远小于86400000000 )并且你将得到500654080

然后,当您将结果除以86400000 ,您将获得5

为了解决这个问题,你需要明确指定乘法的结果是long – 这是因为Java中的所有数字运算符都产生整数,除非明确指示生成其他数字类型。

只需在某些操作数上附加L就足够了:

 final long a = 24 * 60 * 60 * 1000 * 1000L; 

java中的普通数被视为int 。 您需要附加L才能转换为long 。 没有L a =500654080 ,这是错误的。

  final long a= 24 * 60 * 60 * 1000 * 1000L;// Append L 

24 * 60 * 60 * 1000 * 1000这导致数字溢出,因为它将被视为int值。 所以你会得到奇怪的结果。 你应该在这里使用long

你应该使用24 * 60 * 60 * 1000 * 1000L (这是你如何定义long

如何在Java中初始化多长时间?

同意以上答案您可以通过以下两种方式实现您的目标:

 public static void main(String[] args) { //way 1 final long a =(long) 24 * 60 * 60 * 1000 * 1000; final long b = (long)24 * 60 * 60 * 1000; System.out.println(a / b); //way 2 final long a1 = 24 * 60 * 60 * 1000 * 1000L; final long b1 = 24 * 60 * 60 * 1000L; System.out.println(a1 / b1); } 

您可以使用BigInteger或Long:

 public static void main(String[] args) { final BigInteger a = new BigInteger("24"); //multiply by creating big integers.... final BigInteger b = new BigInteger("60") System.out.println(a.divide(b)); }