把一個取值範圍大的數值或是變數,賦值給另一個取值範圍小的變數。
- 不可以直接賦值,需要強制類型轉換
就像是把特大杯咖啡,倒到中杯裡是不可以的,當然,倒到小杯也是有問題的。
顯式類型轉換 (類型)變數
錯誤範例
1
2
long a = 10;
int b = a; //報錯,這樣是不行的
顯式轉換 (int)
1
2
long a = 10;
int b = (int)a; //使用 (int) 轉換
1
2
float a = 10.6f;
int num = (int)a; //10
注意: 浮點數float 轉換為整數int,小數部分會直接拋棄(截斷)
- 如果大整數類型給到小整數類型,數據有可能被截斷或是歧義
範例:數據截斷(精度丟失)
將257較大數據,賦值一個byte數據,得到1
1
2
int a = 257;
byte b = (byte)a; //output: 1
範例:數據歧義(含義改變)
將130較大數據,賦值一個sbyte數據,得到-126
1
2
int a = 130;
sbyte b = (sbyte)a; //output: -126
顯式類型轉換 Convert.To
Convert是C#提供的類,裡面含有一系列的方法。
- 特點:任意數據類型的值,轉換成任意數據類型
1 2
int a = Convert.ToInt32('a'); //97 int b = Convert.ToInt32("123");
- 數據類型無法轉換時,會報錯。
1
double b = Convert.ToDouble("123.af1");
總結
- 顯示轉換有哪兩種方式?
- (類型)變數;
(int)num; - 使用
Convert類提供的功能
- (類型)變數;
- 什麼是轉換時候的截斷與歧義?
- 截斷:大空間給到小空間變數數據,只能給到一部分,從而導致丟失(精度丟失)。
- 歧義:大空間給到小空間變數數據,只能給到一部分,從而導致數據含義的改變。