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

PHP sprintf 函數控制浮點數格式完整指南

     編輯:PHP 綜合知識

基本浮點數格式化

sprintf("%f", $num) 默認保留小數點後 6 位。

sprintf("%f", 3.1415926);  // "3.141593" (四捨五入)

自定義寬度與精度:%m.nf

  • m — 總寬度(含小數點、符號),不足左側填充空格。
  • n — 小數點後位數。
sprintf("%9.3f", 3.1415926);   // "    3.142" (右對齊,寬度 9)
sprintf("%-9.3f", 3.1415926);  // "3.142    " (左對齊)
sprintf("%.3f", 3.1415926);    // "3.142" (不指定總寬度)

常見陷阱:整數參數與 %f

$num = 100;
sprintf("%.2f", $num);        // 正確輸出 "100.00"
sprintf("%.2f", (double)$num); // 同樣輸出 "100.00"

原理: PHP 內部會根據格式字符串自動轉換類型,但 C 底層 printf 族函數直接讀取棧內存,若格式與實際參數類型不匹配會導致未定義行為。PHP 封裝層做了類型轉換,故通常安全,但嚴禁在 sprintf 中混用不匹配的類型(如 %d 對應浮點數)。

其他實用格式符

格式符說明示例
%e/%E科學計數法sprintf("%.2e", 1234) → 1.23e+3
%g/%G自動選擇 %f 或 %e 更短者sprintf("%.3g", 0.00123) → 0.00123
%s字符串sprintf("Hello %s", "World")
%d有符號十進制整數sprintf("%05d", 42) → 00042
%x/%X十六進制小寫/大寫sprintf("%X", 255) → FF

最佳實踐

  • 貨幣金額請使用 number_format() 或 Money 庫,避免浮點精度問題。
  • 日誌/報表固定欄寬輸出時善用 %m.nf 對齊。
  • 結合 vsprintf() 處理數組參數,代碼更整潔。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved