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

PHP sprintf 與 printf 差異深度解析

     編輯:PHP 相關知識

sprintf 與 printf 皆用於格式化字串,核心差異在於「回傳」與「直接輸出」。本文詳細比較兩者語法、格式化代碼、常見用法與效能考量。

快速對照表

特性sprintfprintf
回傳值格式化後的字串輸出字串的長度
輸出方式不輸出,需自行 echo直接輸出到標準輸出
適用場景字串組合、存入變數、日誌、SQL 組裝直接顯示、CLI 輸出、簡單除錯

格式化代碼完整列表

%   - 百分號字面值
b   - 二進位整數
c   - ASCII 字元
d   - 有號十進位整數
e   - 科學記號 (小寫)
E   - 科學記號 (大寫)
f   - 浮點數 (預設 6 位小數)
F   - 不區域化的浮點數
g   - 依精度自動選擇 %e 或 %f
G   - 依精度自動選擇 %E 或 %F
o   - 八進位整數
s   - 字串
u   - 無號十進位整數
x   - 十六進位 (小寫)
X   - 十六進位 (大寫)

進階格式語法:%[flags][width][.precision][length]specifier

%0.2f   // 保留 2 位小數,不足補 0
%9.3f   // 總寬 9 含小數點,右對齊,空格補齊
%-9.3f  // 左對齊
%'.-9.3f // 自訂填補字元 (單引號後為填補字元)
%+d     // 強制顯示正負號
% d     // 正數前加空格,負數顯示負號
%05d    // 整數不足 5 位前補 0

實戰範例

<?php
$num1 = 21;
$num2 = 16.3287;
$num3 = 32.12329;

echo sprintf("%0.2f
", $num1); // 21.00 echo sprintf("%0.2f
", $num2); // 16.33 (四捨五入) echo sprintf("%0.2f
", $num3); // 32.12 // printf 直接輸出 printf("姓名: %s, 年齡: %d, 身高: %.1f cm
", "小明", 25, 172.5); // 輸出: 姓名: 小明, 年齡: 25, 身高: 172.5 cm // 字串填補 printf("[%-10s] [%05d] [%.2f]
", "A", 7, 3.14159); // [A ] [00007] [3.14] // 取得格式化字串存入變數 $log = sprintf("[%s] %s: %s", date('Y-m-d H:i:s'), 'INFO', 'User login'); file_put_contents('app.log', $log . PHP_EOL, FILE_APPEND);

常見陷阱:整數傳給 %f

$num = 100;
var_dump(sprintf("%.2f", $num));      // string(6) "100.00" 正常 (PHP 自動轉型)
var_dump(sprintf("%.2f", (double)$num)); // 相同
// 注意:在 C 語言中會導致未定義行為,PHP 內部已處理型別轉換,安全。

效能建議

  • 單純變數插值 "Hello $name" 效能優於 sprintf。
  • 大量格式化(>10萬次)考慮 vsprintf + 陣列參數,減少函式呼叫開銷。
  • 避免在迴圈中重複編譯格式字串,將格式字串提至迴圈外。

print 函式補充

print 非格式化函式,僅接受單一字串參數,永遠回傳 1,優先級低於 echo,較少用於現代開發。

掌握 sprintf/printf 格式化語法,能寫出更易讀、可維護的字串組合邏輯,尤其在國際化、日誌、報表產出場景不可或缺。

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