php数字转人民币金额大写

 PHP基础  2019-12-28  admin  1593  2150

数值转人民币大写

/**
 * 数字转人民币金额大写
 * Class Ext_Num2Cny
 */
class Number2Cny
{
    static $basic = array(0 => "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖");
    static $advanced = array(1 => "拾", "佰", "仟");

    public static function parseNumber($number)
    {
        $number = trim($number);
        if ($number > 999999999999) {
            return "无法处理";
        }
        if ($number == 0) {
            return "零";
        }
        if (strpos($number, '.')) {
            $number = round($number, 2);
            $data = explode(".", $number);
            $data[0] = self::parseInt($data[0]);
            $data[1] = self::parseDec($data[1]);
            return $data[0] . $data[1];
        } else {
            return self::parseInt($number) . '整';
        }
    }

    /**
     * 整数部分
     * @param $number
     * @return string
     */
    public static function parseInt($number)
    {
        $arr = array_reverse(str_split($number));
        $data = '';

        $zero_num = 0;
        foreach ($arr as $k => $v) {
            $_chinese = '';
            $zero = ($v == 0) ? true : false;
            $x = $k % 4;
            if ($x && $zero && $zero_num > 1) {
                continue;
            }
            switch ($x) {
                case 0:
                    if ($zero) {
                        $zero_num = 0;
                    } else {
                        $_chinese = self::$basic[$v];
                        $zero_num = 1;
                    }
                    if ($k == 8) {
                        $_chinese .= '亿';
                    } elseif
                    ($k == 4) {
                        $_chinese .= '万';
                    }
                    break;
                default:
                    if ($zero) {
                        if ($zero_num == 1) {
                            $_chinese = self::$basic[$v];
                            $zero_num++;
                        }
                    } else {
                        $_chinese = self::$basic[$v];
                        $_chinese .= self::$advanced[$x];
                    }
            }
            $data = $_chinese . $data;
        }
        if (empty($data)) {
            $data = self::$basic[0];
        }
        return $data . '元';
    }

    /**
     * 小数部分
     * @param $number
     * @return string
     */
    public static function parseDec($number)
    {
        if (strlen($number) < 2) $number .= '0';
        $arr = array_reverse(str_split($number));
        $data = '';
        $zero_num = false;
        foreach ($arr as $k => $v) {
            $zero = ($v == 0) ? true : false;
            $_chinese = '';
            if ($k == 0) {
                if (!$zero) {
                    $_chinese = self::$basic[$v];
                    $_chinese .= '分';
                    $zero_num = true;
                }
            } else {
                if ($zero) {
                    if ($zero_num) {
                        $_chinese = self::$basic[$v];
                    }
                } else {
                    $_chinese = self::$basic[$v];
                    $_chinese .= '角';
                }
            }
            $data = $_chinese . $data;
        }
        return $data;
    }
}

使用

echo Number2Cny::parseNumber(123456);//壹拾贰万叁仟肆佰伍拾陆元整
echo "\n";
echo Number2Cny::parseNumber(0.12);//元壹角贰分
echo "\n";
echo Number2Cny::parseNumber(10);//元壹角贰分
echo "\n";
echo Number2Cny::parseNumber(123456.12);//壹拾贰万叁仟肆佰伍拾陆元壹角贰分
echo "\n";
echo Number2Cny::parseNumber(123456789012.1234); //壹仟贰佰叁拾肆亿伍仟陆佰柒拾捌万玖仟零壹拾贰元壹角贰分


转载必须注明出处:

php数字转人民币金额大写 —— centphp

相关推荐


php节点父节点常用的操作方法

php节点父节点常用的操作方法/** *节点操作类 *ClassNode *@packageApp\Library *@authorcentphp.com */ classNodeLibrary { /** *配置 *@vararray */ publicstatic$config=[ &#39;pid_name&#39;=&gt;&#39;pid&#39;, &#39

larave的大括号和javascript的框架解析冲突

larave的大括号和javascript的框架解析冲突方法一: @由于许多 JavaScript 框架也使用 “大括号” 来表示预设的表达式应该显示在浏览器中,因此可以使用 @ 符号表示 Blade 渲染引擎表达式应保持不变。例如:&lt;h1&gt;Laravel&lt;/h1&gt; Hello,@{{name}}.在这个例子中, @ 符号将被 Blade 删除;在 Blade 引擎中

laravel布局模板的使用示例

laravel布局模板的使用示例

百度编辑器ueditor代码块解析缺失不完整的问题

百度编辑器ueditor代码块解析缺失不完整的问题百度编辑器ueditor内容容器应该使用&lt;script&gt;&lt;/script&gt;标签,不能使用&lt;textarea&gt;标签&lt;/textarea&gt;。textarea标签一般情况没有问题,但是如果里面有&lt;pre&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;代码块,会导致解析