2016-07-07 43 views
-1

原始類型的轉換最常用於將浮點值轉換爲整數。當我們這樣做時,浮點值的小數部分被簡單地截斷。爲什麼?爲什麼鑄造原始數據類型會截斷浮點值?

public class Chaz { 
      public static void main(String[] args) { 
      double x = 1234.5678; 
      long g = (long)x; 
      System.out.println(g); 
    } 
} 
+0

因爲long是整數,所以它不能保持浮點數 –

+4

你究竟在問什麼?你在問爲什麼長不能有小數部分?或者你問爲什麼它總是被截斷(=四捨五入),而不是四捨五入,四捨五入或更高,或者在必須輪迴時拋出異常? –

回答

2

從文檔,

長數據類型是一個64位的二的補碼整數。有符號的 長的最小值爲-2^63,最大值爲2^63-1

它不存儲小數精度值。請參閱here

0

long代表長整數。我知道問題是數據丟失,但整數不能存儲非整數。

一個可以決定存儲數目的乘積,像這樣:

public class Chaz { 
      public static void main(String[] args) { 
      double x = 1234.5678; 
      long g = (long)(x * 10000); 
      System.out.println(g); 
    } 
} 

,然後知道g實際上10000X是真正的價值。或者如果需要最近的整數,可以將其舍入。沒有額外的信息我們就無法分辨,但我們實際上可以告訴的是,這是一種正常和預期的行爲。