首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> C 語言問答

C語言隱式型別轉換陷阱:整數相除後賦值給 float 為何結果為 0?

     編輯:C 語言問答

錯誤程式碼


float a; int b = 3, c = 2;
a = b / c; // 整數相除 → 1
printf("%f\n", a); // 輸出 1.000000

若改為 b=2, c=3 → 2/3 = 0 → a = 0.0。

根本原因:運算發生在**賦值之前**

  1. b / c 兩運算元皆為 int → **整數除法**,結果為 int (截斷小數)。
  2. 整數結果 0 或 1 再**隱式轉換**為 float 賦值給 a。
  3. 轉換時小數部分已遺失,無法恢復。

正確寫法:至少一個運算元為浮點數


// 方法一:字面值加 .0
a = b / 3.0;        // 3.0 是 double
a = b / 3.0f;       // 3.0f 是 float

// 方法二:強制轉型
a = (float)b / c;   // b 先轉 float,c 隱式提升
a = b / (float)c;

// 方法三:乘以 1.0
a = b * 1.0 / c;

隱式轉換規則回顧

  1. **整數提升**:char, short, _Bool → int。
  2. **尋常算術轉換**:等級高者勝出 (long double > double > float > unsigned long long > ... > int)。
  3. **賦值轉換**:右值轉為左值型別 (可能截斷/擴展/捨入)。

避坑清單

  • float f = 5/2; → f = 2.0 ❌
  • float f = 5/2.0; → f = 2.5 ✅
  • double d = 1/3 * 3.0; → 1/3=0 → d=0.0 ❌ (結合性左至右)
  • double d = 1.0/3 * 3; → d=1.0 ✅
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved