整數 (int):int 為整數型別,可存放的範圍算是一般的,共佔 32 位元 (bit),是很常用的整數型別,可放正數與負數。
存放範圍為 -2147483648 ~ 2147483647。

 

使用時不必添加後置字元,因為系統預設整數型別可以為 byte、int、unit、long、ulong:

 
int i = 33;
 


但是要將其他型別轉換為 int,或者 int 轉換為其他型別的話,都必須經過隱含轉換:

 
long l = 33;
int i = (int)l;

float f = 5.5f;
int i = (int)f;

// 就算結果為整數, 也需要經過隱含轉換
int i = (int)5.0;
 


以下做法是錯誤的:

 
long l = 33;
int i = l;

// 雖然結果為整數, 但沒經過隱含轉換, 所以一樣錯誤
int i = 5.0;
 


但如果同樣為整數型別,且存放範圍比 int 小的,可以不經過隱含轉換,系統會自動轉換,例如:

 
short s = 22;
int i = s;
 


還有一點值得注意的,基本上將浮點數轉換為整數的話,小數點都會被無條件捨去,但若是小數點太多超出該浮點數可容納的上限後,可能會出現計算錯誤。例如:

 
// float 可容納 7 個有效數字
// 若是數字太多超出上限, 且小數很大時,就會造成進位的情況發生
(int)4.9999997f // 8 個數字, 該結果為 4
(int)4.9999998f // 8 個數字, 該結果為 5, 進位了!
(int)4.9999999f // 8 個數字, 該結果為 5, 進位了!

(int)4.99999f   // 6 個數字, 該結果為 4
(int)54.99999f  // 7 個數字, 該結果為 54
(int)554.99999f // 8 個數字, 該結果為 555, 進位了!

(int)4.199999999999999f // 超長的數字, 但結果為 4
(int)4.899999999999999f // 超長的數字, 但結果為 4
(int)4.999999999999999f // 超長的數字, 結果為 5, 進位了!
 


所以在轉換為整數時,若發生預期外進位的話,可能就是該問題造成的,可以試著改成 double 或者範圍更大的浮點數試試!

 
(int)4.99999999f // float, 結果為 5
(int)4.99999999d // 改為範圍更大的 double, 結果為 4
 

 

arrow
arrow
    文章標籤
    C# int 整數
    全站熱搜

    岳 發表在 痞客邦 留言(0) 人氣()