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

C語言整數除法陷阱:3/5結果為0而非0.6的原因與解決方法

     編輯:C 語言問答

現象


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。

解決方案(任選其一)

方法代碼原理
字面量加 .0double result = 3.0 / 5;至少一個操作數為浮點,觸發浮點除法
強制類型轉換double result = (double)a / b;將被除數轉為 double,除數隱式提升
乘以 1.0double 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) 可在隱式整數除法賦值給浮點變量時發出警告。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved