PHP阿拉伯数字转换为大小写汉语数字

2017-09-06 PHP常用方法 656 WGE

这个方法通常我们在做财务系统用的比较频繁,财务系统需要将阿拉伯数字转换为汉语数字,以下方法可以实现,还可以实现大小写转换。

/*
 * 将阿拉伯数字格式化为中文数字
 * @param Int/Floar $num 字符串
 * @param Bool $uppercase true大写 false小写
 **/
function numConvChFormat($num, $uppercase=false, $mode=true){
	if($uppercase){
	    $char = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'];
	    $dw = ['','拾','佰','仟','','萬','億','兆'];
	    $dec = '點';
	}else{
	    $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]);
        for($i=0;$i<strlen($str);$i++) {
            $out[$i] = $char[$str[$i]];
            if($mode){
                $out[$i] .= $str[$i] != '0'? $dw[$i%4] : '';
                if($str[$i]+$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;
}