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

阿拉伯數字轉中文大寫數字函數:支援小數、萬億兆單位完整實現

     編輯:PHP 相關知識

數字中文化轉換算法完整代碼

支援整數部分按中文數字單位(萬、億、兆)分段,小數部分遞歸處理,適合金額顯示場景。

核心函數

<?php
function ch_num($num, $mode = true) {
    $char = ["零", "壹", "貳", "三", "肆", "伍", "陸", "柒", "捌", "玖"];
    $dw   = ["", "拾", "佰", "仟", "", "萬", "億", "兆"];
    $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 = [];
        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] = "";
                // 萬/億/兆 節點
                if ($i % 4 == 0) $out[$i] .= $dw[4 + floor($i / 4)];
            }
        }
        $retval = join("", array_reverse($out)) . $retval;
    }
    return $retval;
}

// 測試
echo ch_num("300045.0123");  // 輸出:叁拾萬零肆拾伍點零壹貳三
echo ch_num("880079.1234");  // 捌拾捌萬零柒拾玖點壹貳三四
echo ch_num("12345006789001.123");  // 拾貳兆叁仟肆佰伍拾億零陸仟柒佰捌拾玖萬零壹點壹貳三

算法關鍵點

  1. 反轉字符串:從個位開始按 4 位分組(個十百千、萬、億、兆)
  2. 零處理邏輯:連續零合併為單個「零」,節點位(萬/億)強制顯示單位
  3. 小數遞歸:小數部分調用 mode=false 直接逐位轉換,不加單位
  4. 前導零清理:^0* 正則去除整數部分前導零

金融級改進建議

  • 整數部分轉換後追加「元」「整」
  • 小數位固定兩位(角、分),不足補零
  • 增加負數處理(加「負」字前綴)
  • 使用 BCMath 處理超大數字精度

詳細說明:論壇原帖

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