<?php

// 阿拉伯数字转中文大写金额
function NumToCNMoney($num, $retval = false, $mode = true, $sim = true)
{
    if (! is_numeric($num))
        return '含有非数字非小数点字符!';
    $char = $sim ? array(
        '零',
        '一',
        '二',
        '三',
        '四',
        '五',
        '六',
        '七',
        '八',
        '九'
    ) : array(
        '零',
        '壹',
        '贰',
        '叁',
        '肆',
        '伍',
        '陆',
        '柒',
        '捌',
        '玖'
    );
    $unit = $sim ? array(
        '',
        '十',
        '百',
        '千',
        '',
        '万',
        '亿',
        '兆'
    ) : array(
        '',
        '拾',
        '佰',
        '仟',
        '',
        '萬',
        '億',
        '兆'
    );
    if ($retval) {
        $retval = $mode ? '元' : '点';
    }else{
        $retval="";
    }
    // 小数部分
    if (strpos($num, '.')) {
        list ($num, $dec) = explode('.', $num);
        $dec = strval(round($dec, 2));
        if ($mode) {
            $retval .= "{$char[$dec['0']]}角{$char[$dec['1']]}分";
        } else {
            for ($i = 0, $c = strlen($dec); $i < $c; $i ++) {
                $retval .= $char[$dec[$i]];
            }
        }
    }
    // 整数部分
    $str = $mode ? strrev(intval($num)) : strrev($num);
    for ($i = 0, $c = strlen($str); $i < $c; $i ++) {
        $out[$i] = $char[$str[$i]];
        if ($mode) {
            $out[$i] .= $str[$i] != '0' ? $unit[$i % 4] : '';
            if ($i > 1 and $str[$i] + $str[$i - 1] == 0) {
                $out[$i] = '';
            }
            if ($i % 4 == 0) {
                $out[$i] .= $unit[4 + floor($i / 4)];
            }
        }
    }
    $retval = join('', array_reverse($out)) . $retval;
    return $retval;
}
echo NumToCNMoney(10,false, false, false);
最后修改:2019 年 09 月 05 日
如果觉得我的文章对你有用,请随意赞赏