close
整數 (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
文章標籤
全站熱搜