核心區別
| 函數 | 行為 | 返回值 |
printf | 直接輸出格式化字串 | 輸出字串長度 |
sprintf | 返回格式化字串,不輸出 | 格式化後字串 |
print | 單參數輸出 | 始終返回 1 |
浮點數格式化實例:保留兩位小數
<?php
$num1 = 21;
echo sprintf("%0.2f", $num1) . "<br />"; // 21.00
$num2 = 16.3287;
echo sprintf("%0.2f", $num2) . "<br />"; // 16.33
$num3 = 32.12329;
echo sprintf("%0.2f", $num3) . "<br />"; // 32.12
格式符 %0.2f 解析
%:起始標記
0:填充字符(此處無寬度效果可省略)
.2:小數點後 2 位
f:浮點數型別
完整轉換符號表
| 符號 | 說明 |
| % | 輸出 % 本身 |
| b | 整數 → 二進位 |
| c | 整數 → ASCII 字元 |
| d | 整數 → 十進位 |
| f | 雙精度 → 浮點數 |
| o | 整數 → 八進位 |
| s | 值 → 字串 |
| x | 整數 → 小寫十六進位 |
| X | 整數 → 大寫十六進位 |
進階格式控制
sprintf("%+010.2f", -3.14); // 輸出 "-000003.14"(符號、寬度、填充零、精度)
sprintf("%'#10.2f", 3.14); // 輸出 "####3.14"(自定義填充字 #)
實務建議
- 需直接輸出用
printf,需字串拼接/存儲用 sprintf。
- 金額顯示建議用
number_format 或 Money 庫,避免浮點精度問題。
%0.2f 等同 %.2f,前導 0 僅在指定總寬度(如 %08.2f)時生效。