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小得多),你会得到a500654080

然后,当你将结果除以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));
 }

最新更新