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

PHP 阿拉伯數字轉中文大寫數字函式:支援小數與萬億兆單位

     編輯:PHP 綜合知識

函式功能

將數字字串(整數或浮點數)轉換為中文大寫金額格式,如 300045.0123 → 叁拾萬零肆拾伍點零壹貳叁。支援「萬、億、兆」大單位,正確處理連續零的合併與單位補齊。

完整程式碼

<?php
function ch_num($num, $mode = true) {
    $char = array("零", "壹", "貳", "叁", "肆", "伍", "陸", "柒", "捌", "玖");
    $dw   = array("", "拾", "佰", "仟", "", "萬", "億", "兆");
    $dec  = "點";
    $retval = "";

    // 正則分離整數與小數部分
    if ($mode) {
        preg_match_all("/^0*(\d*)\.?(\d*)/", $num, $ar);
    } else {
        preg_match_all("/(\d*)\.?(\d*)/", $num, $ar);
    }

    // 遞歸處理小數部分
    if ($ar[2][0] != "") {
        $retval = $dec . ch_num($ar[2][0], false);
    }

    // 處理整數部分
    if ($ar[1][0] != "") {
        $str = strrev($ar[1][0]); // 反轉字串,從個位開始處理
        $out = array();
        for ($i = 0; $i < strlen($str); $i++) {
            $digit = $str[$i];
            $out[$i] = $char[$digit];

            if ($mode) {
                // 非零數字加單位(拾/佰/仟)
                $out[$i] .= ($digit != "0") ? $dw[$i % 4] : "";
                // 連續零合併:若當前位與前一位皆為零,清空當前輸出
                if ($digit + $str[$i-1] == 0) {
                    $out[$i] = "";
                }
                // 每 4 位補大單位(萬/億/兆)
                if ($i % 4 == 0) {
                    $out[$i] .= $dw[4 + floor($i / 4)];
                }
            }
        }
        $retval = join("", array_reverse($out)) . $retval;
    }
    return $retval;
}

// 測試
echo ch_num("300045.0123"); // 輸出:叁拾萬零肆拾伍點零壹貳叁
?>

邏輯詳細解析

  1. 正則分組:^0*(\d*)\.?(\d*) 去除整數前導零,分別捕獲整數部($ar[1][0])與小數部($ar[2][0])。
  2. 小數遞歸:小數部分直接逐位轉換(false 模式不加單位),前綴「點」。
  3. 整數反轉處理:將整數字串反轉,索引 $i 對應位權(0=個, 1=拾, 2=佰, 3=仟, 4=萬...)。
  4. 單位邏輯:
    • 基本單位:$dw[$i % 4] 循環「拾、佰、仟、空」。
    • 大單位:每 4 位($i % 4 == 0)補 $dw[4 + floor($i/4)] → 萬、億、兆。
    • 零處理:非零才加基本單位;連續兩零則當前位輸出空字串,避免「零零」。
  5. 結果組裝:反轉陣列回正序,連接字串,最後拼接小數部分。

使用限制與擴展

  • 輸入必須為純數字字串,不支援科學記號、千分位逗號、負號。前端需預處理。
  • 大單位陣列 $dw 可擴展「京、垓」等更高單位。
  • 若需財務專用格式(如「整」字結尾、角分單位),需在函式末尾追加邏輯。

此函式無外部依賴,效能優異,適合發票列印、財務報表、合同金額轉換等中文系統場景。

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