int a = 3, b = 5;
double result = a / b; // result == 0.0
printf("%f\n", result); // 輸出 0.000000
a 和 b 均為 int,C 語言規定整數除法截斷向零取整,3/5 = 0。賦值給 double 時已經是整數 0,轉換為 0.0。
| 方法 | 代碼 | 原理 |
|---|---|---|
字面量加 .0 | double result = 3.0 / 5; | 至少一個操作數為浮點,觸發浮點除法 |
| 強制類型轉換 | double result = (double)a / b; | 將被除數轉為 double,除數隱式提升 |
| 乘以 1.0 | double result = a * 1.0 / b; | 同理,提升整個表達式類型 |
| 定義為浮點變量 | double a = 3, b = 5; double result = a / b; | 源頭保證浮點類型 |
若嚴禁浮點 (如嵌入式無 FPU),可放大後再除:
// 保留 2 位小數
int result_x100 = (a * 100 + b/2) / b; // 四捨五入
// result_x100 = 60 代表 0.60
printf("%d.%02d\n", result_x100/100, result_x100%100);
開啟 -Wconversion (GCC/Clang) 或 /W4 (MSVC) 可在隱式整數除法賦值給浮點變量時發出警告。