在JAVA中TypeCasting从double到long

时间:2017-02-07 07:19:31

标签: java typecasting-operator

class test{
public static void main(String... args){
    double d=5.637;
    System.out.println("double is:"+d);
    long a=(long)d;
    System.out.println("long is:"+a);
   }
}

上述代码的输出为long is : 5,符合预期。

但是当我运行以下代码时:

class test{
public static void main(String... args){
     double d=12345678901234567890.637;
     System.out.println("double is:"+d);
     long a=(long)d;
     System.out.println("long is:"+a);
  }
}

输出不符合预期。结果是long is:9223372036854775807

我想问一下为什么当我把双数字庞大的时候发生。

1 个答案:

答案 0 :(得分:1)

对于最安全的施法你应该使用Math.round(d)并且最大长度是9,223,372,036,854,775,807你试图将更大的双倍值加到长

编辑:您可以使用BigInteger而不是Long