C 型別轉換
型別轉換
有時,您需要將一種資料型別的值轉換為另一種型別。這被稱為型別轉換。
例如,如果您嘗試將兩個整數 5
除以 2
,您會期望結果是 2.5
。但因為我們處理的是整數(而不是浮點數),下面的示例只會輸出 2
。
要獲得正確的結果,您需要了解型別轉換的工作原理。
C 語言中有兩種轉換型別:
- 隱式轉換(自動)
- 顯式轉換(手動)
隱式轉換
當您將一種型別的值賦給另一種型別時,編譯器會自動執行隱式轉換。
例如,如果您將 int
值賦給 float
型別:
如您所見,編譯器自動將整數值 9
轉換為浮點數值 9.000000
。
這可能很危險,因為在某些情況下您可能會失去對特定值的控制。
特別是反過來,下面的示例會自動將浮點數值 9.99
轉換為整數值 9
。
.99
去了哪裡?我們可能希望在程式中使用這些資料!所以要小心。瞭解編譯器在這些情況下如何工作很重要,以避免意外結果。
再舉個例子,如果您將兩個整數相除:5
除以 2
,您知道總和是 2.5
。正如您在本頁開頭所知,如果將總和儲存為整數,結果只會顯示數字 2
。因此,將總和儲存為 float
或 double
會更好,對吧?
為什麼結果是 2.00000
而不是 2.5
?嗯,這是因為在除法運算中,5 和 2 仍然是整數。在這種情況下,您需要手動將整數值轉換為浮點數值。(見下文)。
顯式轉換
顯式轉換是手動完成的,方法是將型別放在值前面的括號 ()
中。
考慮到我們上面示例中的問題,現在我們可以得到正確的結果了:
您也可以將型別放在變數名前面:
示例
int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;
printf("%f", sum); // 2.500000
自己動手試一試 »
既然您已經在上一章中瞭解了“小數精度”,您可以透過刪除多餘的零(如果您願意)使輸出更加清晰。
現實生活中的例子
這是一個關於資料型別和型別轉換的實際示例,我們建立一個程式來計算使用者分數相對於遊戲中最高分數的百分比。
示例
// 將遊戲中的最高可能分數設定為 500
int maxScore = 500;
// 使用者的實際得分
int userScore = 423;
/* 計算使用者得分相對於可用最高分數的百分比。
將 userScore 轉換為 float,以確保除法準確 */
float percentage = (float) userScore / maxScore * 100.0;
// 列印百分比
printf("User's percentage is %.2f", percentage);
自己動手試一試 »