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 * 1000
为86400000
。如果你把它乘以1000
,它会溢出int
类型(因为int
可以容纳的最大值是2147483647
,比86400000000
小得多),你会得到a
的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中初始化long ?
同意以上答案。你可以通过以下两种方式实现你想要的:
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));
}