2017-02-07 22 views
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

我想問爲什麼會發生這種情況,當我在雙倍數量巨大的數字。

+0

長期形成的BigInteger的最長允許的最大值。 –

+0

當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

回答

1

實現安全鑄造你應該使用Math.round(d),最大長尺寸是9,223,372,036,854,775,807你想assing更大的雙重價值長期

編輯:你可以用它代替這個雙十字架長

相關問題