0
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
,這與預期的相同。在JAVA中從double到long的類型轉換
但是,當我跑到下面的代碼:
class test{
public static void main(String... args){
double d=123456789.637;
System.out.println("double is:"+d);
long a=(long)d;
System.out.println("long is:"+a);
}
}
並不如預期的輸出。其結果是long is:9223372036854775807
我想問爲什麼會發生這種情況,當我在雙倍數量巨大的數字。
長期形成的BigInteger的最長允許的最大值。 –
當double值超過long的最大值時,[縮小基元轉換(JLS第5.1.3節)]的結果(https://docs.oracle.com/javase/specs/jls/se8 /html/jls-5.html#jls-5.1.3)從'double'到'long'是'Long.MAX_VALUE',即'9223372036854775807':* [當]浮點數轉換爲'long'時, ,[...]和[值]太大(大幅值或正無窮大的正值),結果是「long」類型的最大可表示值。 – Andreas