【PHP】 金额转换 数字转大写

示例:

4861861.45   肆佰捌拾陆万壹仟捌佰陆拾壹元肆角伍分
10131561684.06   壹佰零壹亿叁仟壹佰伍拾陆万壹仟陆佰捌拾肆元零陆分

function convertCurrency($currencyDigits)
{
    $maximum_number = 99999999999.99;//最大转换值 一千亿
    $cn_zero = "零";
    $cn_one = "壹";
    $cn_two = "贰";
    $cn_three = "叁";
    $cn_four = "肆";
    $cn_five = "伍";
    $cn_six = "陆";
    $cn_seven = "柒";
    $cn_eight = "捌";
    $cn_nine = "玖";
    $cn_ten = "拾";
    $cn_hundred = "佰";
    $cn_thousand = "仟";
    $cn_ten_thousand = "万";
    $cn_hundred_million = "亿";
    $cn_dollar = "元";
    $cn_ten_cent = "角";
    $cn_cent = "分";
    $cn_integer = "整";

    $currencyDigits = (string)$currencyDigits;
    if ($currencyDigits > $maximum_number) {
        throw new ErrorException('金额过大,应小于1000亿元!');
    }

    //分隔小数和整数部分
    $parts = explode('.', $currencyDigits);
    if (count($parts) > 1) {
        $integral = $parts[0];//整数
        $decimal = mb_substr($parts[1], 0, 2);//小数部分
    } else {
        $integral = $parts[0];
        $decimal = "";
    }

    $digits = array($cn_zero, $cn_one, $cn_two, $cn_three, $cn_four, $cn_five, $cn_six, $cn_seven, $cn_eight, $cn_nine);
    $radices = array("", $cn_ten, $cn_hundred, $cn_thousand);
    $bigRadices = array("", $cn_ten_thousand, $cn_hundred_million);
    $decimals = array($cn_ten_cent, $cn_cent);

    $outputCharacters = "";
    //整数部分
    if ($integral > 0) {
        $zeroCount = 0;
        for ($i = 0; $i < strlen($integral); $i++) {
            $p = strlen($integral) - $i - 1;
            $d = mb_substr($integral, $i, 1);
            $quotient = $p / 4;
            $modulus = $p % 4;
            if ($d == "0") {
                $zeroCount++;
            } else {
                if ($zeroCount > 0) {
                    $outputCharacters .= $digits[0];
                }
                $zeroCount = 0;
                $outputCharacters .= $digits[$d] . $radices[$modulus];
            }
            if ($modulus == 0 && $zeroCount < 4) {
                $outputCharacters .= $bigRadices[$quotient];
                $zeroCount = 0;
            }
        }
        $outputCharacters .= $cn_dollar;
    }

    //小数部分:
    if ($decimal != "") {
        $zeroCount = 0;
        for ($i = 0; $i < strlen($decimal); $i++) {
            $d = substr($decimal, $i, 1);
            if ($d != "0") {
                if ($zeroCount > 0) {
                    $outputCharacters .= $digits[0];
                }
                $outputCharacters .= $digits[$d] . $decimals[$i];
            } else {
                $zeroCount++;
            }
        }
    }

    if ($outputCharacters == "") {
        $outputCharacters = $cn_zero . $cn_dollar;
    }
    if ($decimal == "") {
        $outputCharacters .= $cn_integer;
    }
    return $outputCharacters;
}
# 常用 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×