%[flags][width][.precision]f控制浮點數輸出最常用的格式符是 %f,其完整結構:
%[標志][最小寬度][.精度]長度修飾符類型
針對「輸出小數並控制保留位數」,關鍵在 精度 字段 .精度。
| 格式串 | 輸入值 | 輸出結果 | 說明 |
|---|---|---|---|
%.2f | 3.14159 | 3.14 | 保留 2 位小數,四捨五入 |
%8.2f | 3.1 | 3.10 | 總寬度 8,右對齊,不足填空格 |
%-8.2f | 3.1 | 3.10 | 左對齊 |
%08.2f | 3.1 | 00003.10 | 不足寬度用 0 填充 |
%+.2f | 3.14 | +3.14 | 強制顯示正負號 |
%#.2f | 3.0 | 3.00 | 強制顯示小數點(配合精度) |
.n 表示小數點後保留 n 位,四捨五入。m 表示整個輸出字符最小寬度(含小數點、符號、數字),不足左側填空格(默認右對齊)。%.0f 可輸出無小數部分的整數形式(仍四捨五入)。%e/%E 科學計數法,%g/%G 自動選擇定點/科學計數法。float、double 統一用 %f(float 傳參自動提升為 double);long double 用 %Lf。#include <stdio.h>
int main() {
double pi = 3.1415926535;
double neg = -2.71828;
double small = 0.0001234;
printf("默認 6 位: %f\n", pi); // 3.141593
printf("保留 2 位: %.2f\n", pi); // 3.14
printf("保留 4 位: %.4f\n", pi); // 3.1416
printf("寬度 10 保留 2: %10.2f\n", pi); // 3.14
printf("左對齊寬度 10: %-10.2f\n", pi); // 3.14
printf("0 填充寬度 10: %010.2f\n", pi); // 0000003.14
printf("強制符號: %+.2f\n", pi); // +3.14
printf("負數保留 3 位: %.3f\n", neg); // -2.718
printf("科學計數法: %e\n", small); // 1.234000e-04
printf("自動選擇: %g\n", small); // 0.0001234
return 0;
}
float f = 5/2; // 2.000000 → 改用 5.0/2 或 (float)5/2。%f 對應 int 導致未定義行為(現代編譯器會警告 -Wformat)。float 約 6-7 位有效數字,double 約 15-16 位,過大精度無意義。scanf 輸入浮點數float 用 %f,double 用 %lf,long double 用 %Lf。%[^\n] 讀取整行再用 sscanf 解析更安全。掌握 %[width][.precision]f 這一核心模式,即可靈活控制 C 語言浮點數輸出格式。建議配合 printf 返回值(輸出字符數)做錯誤檢測,養成 -Wall -Wextra 編譯習慣,讓格式字符串錯誤無處遁形。