選單
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP How to W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

C 型別轉換


型別轉換

有時,您需要將一種資料型別的值轉換為另一種型別。這被稱為型別轉換

例如,如果您嘗試將兩個整數 5 除以 2,您會期望結果是 2.5。但因為我們處理的是整數(而不是浮點數),下面的示例只會輸出 2

示例

int x = 5;
int y = 2;
int sum = 5 / 2;

printf("%d", sum); // 輸出 2
自己動手試一試 »

要獲得正確的結果,您需要了解型別轉換的工作原理。

C 語言中有兩種轉換型別:

  • 隱式轉換(自動)
  • 顯式轉換(手動)

隱式轉換

當您將一種型別的值賦給另一種型別時,編譯器會自動執行隱式轉換。

例如,如果您將 int 值賦給 float 型別:

示例

// 自動轉換:int 到 float
float myFloat = 9;

printf("%f", myFloat); // 9.000000
自己動手試一試 »

如您所見,編譯器自動將整數值 9 轉換為浮點數值 9.000000

這可能很危險,因為在某些情況下您可能會失去對特定值的控制。

特別是反過來,下面的示例會自動將浮點數值 9.99 轉換為整數值 9

示例

// 自動轉換:float 到 int
int myInt = 9.99;

printf("%d", myInt); // 9
自己動手試一試 »

.99 去了哪裡?我們可能希望在程式中使用這些資料!所以要小心。瞭解編譯器在這些情況下如何工作很重要,以避免意外結果。

再舉個例子,如果您將兩個整數相除:5 除以 2,您知道總和是 2.5。正如您在本頁開頭所知,如果將總和儲存為整數,結果只會顯示數字 2。因此,將總和儲存為 floatdouble 會更好,對吧?

示例

float sum = 5 / 2;

printf("%f", sum); // 2.000000
自己動手試一試 »

為什麼結果是 2.00000 而不是 2.5?嗯,這是因為在除法運算中,5 和 2 仍然是整數。在這種情況下,您需要手動將整數值轉換為浮點數值。(見下文)。


顯式轉換

顯式轉換是手動完成的,方法是將型別放在值前面的括號 () 中。

考慮到我們上面示例中的問題,現在我們可以得到正確的結果了:

示例

// 手動轉換:int 到 float
float sum = (float) 5 / 2;

printf("%f", sum); // 2.500000
自己動手試一試 »

您也可以將型別放在變數名前面:

示例

int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;

printf("%f", sum); // 2.500000
自己動手試一試 »

既然您已經在上一章中瞭解了“小數精度”,您可以透過刪除多餘的零(如果您願意)使輸出更加清晰。

示例

int num1 = 5;
int num2 = 2;
float sum = (float) num1 / num2;

printf("%.1f", sum); // 2.5
自己動手試一試 »

現實生活中的例子

這是一個關於資料型別和型別轉換的實際示例,我們建立一個程式來計算使用者分數相對於遊戲中最高分數的百分比。

示例

// 將遊戲中的最高可能分數設定為 500
int maxScore = 500;

// 使用者的實際得分
int userScore = 423;

/* 計算使用者得分相對於可用最高分數的百分比。
將 userScore 轉換為 float,以確保除法準確 */
float percentage = (float) userScore / maxScore * 100.0;

// 列印百分比
printf("User's percentage is %.2f", percentage);
自己動手試一試 »

C 練習

透過練習來測試自己

練習

使用型別轉換來確保下面示例的結果1.5,而不僅僅是 1

float sum =  3 / 2;
printf("%.1f", sum);

開始練習



×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援