class Num2Cny{
    static $basical = 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::int($data[0]);
            $data[1] = self::dec($data[1]);
            return $data[0] . $data[1];
        } else {
            return self::int($number) . '整';
        }
    }

    public static function int($number){
        $arr = array_reverse(str_split($number));
        $data = '';
        $zero = false;
        $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::$basical[$v];
                        $zero_num = 1;
                    }
                    if ($k == 8) {
                        $_chinese .= '亿';
                    } elseif ($k == 4) {
                        $_chinese .= '万';
                    }
                    break;
                default:
                    if ($zero) {
                        if ($zero_num == 1) {
                            $_chinese = self::$basical[$v];
                            $zero_num++;
                        }
                    } else {
                        $_chinese = self::$basical[$v];
                        $_chinese .= self::$advanced[$x];
                    }
            }
            $data = $_chinese . $data;
        }
        return $data . '元';
    }
    
    public static function dec($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::$basical[$v];
                    $_chinese .= '分';
                    $zero_num = true;
                }
            } else {
                if ($zero) {
                    if ($zero_num) {
                        $_chinese = self::$basical[$v];
                    }
                } else {
                    $_chinese = self::$basical[$v];
                    $_chinese .= '角';
                }
            }
            $data = $_chinese . $data;
        }
        return $data;
    }
}

使用方法
Num2Cny::ParseNumber($number);

注意:命名空间,访问方法,接受的$number数据验证

最后修改:2020 年 12 月 10 日 08 : 26 PM
对您有帮助的话,请赏包辣条吧 ^~^