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

C語言溫度轉換與輸出格式常見錯誤修正:浮點數精度與printf佔位符

     編輯:C 語言問答

原始問題代碼片段


celsius = 5/9 * (fahr - 32);        // 錯誤 1:整數除法
printf("%3.0d, %6.0lf", fahr, celsius); // 錯誤 2:格式佔位符不匹配

錯誤 1:整數除法導致精度歸零

5/9 兩個 int 相除,結果為 0 (C 整數除法截斷向零)。後續乘以任何數仍為 0。

修正:至少一個操作數為浮點數:


celsius = 5.0 / 9.0 * (fahr - 32);  // 或 5.0/9, 5/9.0
// 或更清晰
celsius = (5.0/9.0) * (fahr - 32);

錯誤 2:printf 格式佔位符與實參類型不匹配

實參類型正確佔位符錯誤示例
int%d 或 %i%lf (針對 double)
double%f、%lf、%e、%g%d (導致垃圾值/崩潰)
float%f (默認提升為 double)%d

修正:


// 假設 fahr 為 int, celsius 為 double
printf("%3.0f %6.1f\n", (double)fahr, celsius); // 統一用 %f, 寬度.精度
// 或
printf("%3d %6.1f\n", fahr, celsius); // int 用 %d, double 用 %f
  • %3.0f:寬度 3,小數位 0 (四捨五入整數顯示)。
  • %6.1f:寬度 6,保留 1 位小數。

完整修正示例


#include 
int main(void) {
    int fahr;
    double celsius;
    for (fahr = 0; fahr <= 300; fahr += 20) {
        celsius = (5.0/9.0) * (fahr - 32);
        printf("%3d %6.1f\n", fahr, celsius);
    }
    return 0;
}

避坑清單

  1. 除法運算中,字面量加 .0 強制浮點運算。
  2. printf/scanf 格式字符串必須與實參類型嚴格對應,開啟編譯器警告 (-Wformat//W4) 自動檢測。
  3. double 打印用 %f (C 規定 printf 可用 %f 打印 double,%lf 為 C99 明確支持),scanf 讀 double 必須用 %lf。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved