使用 printf("%e", value) 輸出浮點數時,指數部分總是顯示三位數字(含符號),如 1.23e-002 而非 1.23e-2。
根據 C 標準庫規範,%e / %E 格式化輸出的指數部分至少包含兩位數字,但主流實現(glibc、MSVC、musl 等)統一採用三位數字(格式為 ±ddd)。
[-]d.dddddd e ±ddd
│ │ └── 指數:固定三位,不足前導補 0
│ └───────── 尾數:默認 6 位小數
└───────────── 整數部分:單位數字(非零)
| 格式 | 輸出示例 (0.0123) | 指數位數 | 適用場景 |
|---|---|---|---|
%e | 1.230000e-002 | 固定 3 位 | 科學計算、日誌記錄 |
%E | 1.230000E-002 | 固定 3 位 | 大寫 E 風格 |
%g | 0.0123 | 自動切換 | 通用輸出、短數值 |
%.2e | 1.23e-002 | 固定 3 位 | 控制尾數精度 |
double val = 0.0123456789;
printf("%e\n", val); // 1.234568e-002 (默認 6 位小數)
printf("%.3e\n", val); // 1.235e-002 (3 位小數)
printf("%.0e\n", val); // 1e-002 (無小數位)
printf("%10.3e\n", val); // 1.235e-002 (寬度 10 右對齊)
printf("%-10.3e\n", val); // 1.235e-002 (左對齊)
測試代碼:
#include
#include
int main() {
double test[] = {1.0, 0.01, 1e5, 1e-5, DBL_MAX, DBL_MIN};
for (double v : test) {
printf("%-15e %-.3e\n", v, v);
}
return 0;
}
在 Linux (glibc)、Windows (MSVC)、macOS (Darwin libc)、嵌入式 (newlib/musl) 上運行,指數部分均為三位數,體現了事實標準的一致性。
%e 輸出指數固定三位(如 -002)是主流 C 庫的事實標準實現,滿足標準「至少兩位」要求,旨在保證輸出對齊、範圍覆蓋與歷史兼容。開發者無需干預指數位數,只需通過精度控制(如 %.3e)調整尾數小數位即可。若需非標準格式,需自行實現格式化函數。