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

C語言浮點數輸出全是0.0000:整數除法導致精度丟失

     編輯:程式設計綜合問答

典型錯誤代碼

int a = 5, b = 2;
float result = a / b;  // 整數除法結果為 2,再隱式轉 float → 2.0000
printf("%.4f", result);

根本原因

整數除法截斷小數部分:C語言中int / int結果仍為int,小數部分直接丟棄,賦值給float時已是整數值。

三種修正方法

  1. 強制類型轉換:float result = (float)a / b;
  2. 字面量提升:float result = a / 2.0f;(2.0f為float,觸發浮點運算)
  3. 變量聲明為浮點:float a = 5, b = 2;

進階:浮點數比較陷阱

float x = 0.1f + 0.2f;
if (x == 0.3f) // 可能為 false!二進制無法精確表示0.1
// 正確比較:
if (fabs(x - 0.3f) < 1e-6)

調試建議

  • 打印中間變量:printf("a=%d, b=%d, a/b=%d\n", a, b, a/b);
  • 開啟編譯器警告:gcc -Wall -Wextra -Wconversion會提示隱式精度丟失。
  • 金融/精度敏感領域使用decimal庫或定點數(以分為單位存整數)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved