【发布时间】:2017-02-07 07:19:31
【问题描述】:
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
我想问一下为什么我在双倍取大量数字时会发生这种情况。
【问题讨论】:
-
long 形式的这个 double 越过 long 中允许的最大值。
-
当
double的值超过long的最大值时,Narrowing Primitive Conversion (JLS §5.1.3)从double到long的结果是Long.MAX_VALUE,即9223372036854775807:[当]浮点数转换为long,[...并且]值[是]太大(一个大的正值或正无穷大),结果[...]是long类型的最大可表示值。