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

printf 格式化輸出深度解析:fldwidth 與 precision 實戰

     編輯:關於C語言

printf 格式化輸出深度解析:fldwidth 與 precision 實戰

格式化字符串中轉換說明格式:%[flags][fldwidth][.precision][len]type。本文重點剖析 域寬度 與 精度 的交互規則。

概念定義

  • fldwidth(最小域寬):輸出字符最少佔寬,不足左填空格(默認)或 0(0 標誌),超寬不截斷。
  • precision(精度):
    • 整數:最少數字位數,不足前補 0。
    • 浮點數:小數點後最少位數,四捨五入,超出截斷。
    • 字符串:最大字符數,超出截斷。

實戰示例

float f = 5223.3324;
int i = 30000;
char *s = "Hello,World!";

printf("%11.3f\n", f);  // 輸出: "  5223.332" (寬11, 保留3位小數)
printf("%11.8d\n", i);  // 輸出: "000030000" (寬11, 整數至少8位, 前補0)
printf("%11.8s\n", s);  // 輸出: "  Hello,Wo" (寬11, 字串最多8字符, 截斷後左對齊)

關鍵細節圖解

浮點數四捨五入疑問

代碼中 5223.3324 以 %.3f 輸出理論為 5223.332,但實測得 5223.333。原因在於 5223.3324 無法精確用二進制浮點表示,實際存儲值略大於 5223.3324,四捨五入時進位。浮點數輸出四捨五入基於實際存儲的二進制近似值,而非十進制字面值。

組合使用技巧

  • %08d:寬度 8,前補 0(等同 %8.8d)。
  • %-10.5s:寬度 10 左對齊,最多 5 字符。
  • %*.*s:寬度與精度由參數動態指定。

總結表

類型fldwidthprecision
整數最小總寬(含符號)最小數字位數(前補0)
浮點數最小總寬(含小數點符號)小數點後位數(四捨五入)
字符串最小總寬最大字符數(截斷)

精通 fldwidth 與 precision,能生成整齊對齊的表格、報表與日志,是 C 程序員必備基本功。

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