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

PHP 金額格式化函數:千分位分隔、貨幣符號、負數處理

     編輯:PHP 相關知識

PHP 金額格式化函數:千分位分隔、貨幣符號、負數處理

金融、電商系統對金額顯示要求嚴格:千分位分隔、固定小數位、貨幣符號、負數紅色/括號顯示。本文提供一個健壯的 format_money 函數滿足常見需求。

函數實作

<?php
/**
 * 格式化金額
 * @param float|int $money   金額 (分為單位傳入建議乘 100)
 * @param int       $len     小數位數,預設 2
 * @param string    $sign    貨幣符號,預設 '¥'
 * @return string
 */
function format_money($money, $len = 2, $sign = '¥') {
    $negative = $money < 0 ? '-' : '';
    $absMoney = abs($money);
    $len = max(0, (int)$len);

    // 整數部分加千分位
    $intPart = (string)(int)$absMoney;
    $rev = strrev($intPart);
    $chunks = str_split($rev, 3);
    $formattedInt = strrev(implode(',', $chunks));

    // 小數部分
    $decimal = '';
    if ($len > 0) {
        $decimal = '.' . substr(sprintf('%01.' . $len . 'f', $absMoney), -$len);
    }

    return $sign . $negative . $formattedInt . $decimal;
}

// 使用範例
echo format_money(1234567.89) . PHP_EOL;   // ¥1,234,567.89
echo format_money(-98765.5, 2, '$') . PHP_EOL; // $-98,765.50
echo format_money(1000, 0) . PHP_EOL;       // ¥1,000
echo format_money(0.05, 4) . PHP_EOL;       // ¥0.0500

現代 PHP (NumberFormatter) 國際化最佳做法

<?php
function format_money_intl($money, $locale = 'zh_CN', $currency = 'CNY') {
    $fmt = new NumberFormatter($locale, NumberFormatter::CURRENCY);
    return $fmt->formatCurrency($money / 100, $currency); // 假設分為單位
}

echo format_money_intl(123456789); // ¥1,234,567.89 (自動適應地區格式)

優勢:自動處理各地區千分位符號 (空格/逗號/點)、貨幣符號位置、小數位標準、負數格式 (括號/紅色/負號)。需安裝 intl 擴展。

關鍵場景處理建議

  • 資料庫存儲:統一用 **整數分 (BigInt)** 存儲,避免浮點精度問題。
  • 前端顯示:後端輸出標準化數字 (如 1234567.89),前端用 Intl.NumberFormat 或庫 (accounting.js) 格式化,支援用戶地區偏好。
  • 匯出 Excel/CSV:輸出原始數值,讓試算軟體自動識別貨幣格式,避免字串導致無法計算。
  • 負數顯示:會計習慣常用紅字或括號 (1,234.56),前端 CSS 控制更靈活。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved