简单的金额小写转成读出来的大写

最近同事们一起讨论技术问题,偶然间说到这个功能。工作也不忙,就试着写一下。具体代码如下:

$num = '586480054.05';
$big_arr = ['9'=>'亿','8'=>'千万','7'=>'百万','6'=>'十万','5'=>'万','4'=>'千','3'=>'百','2'=>'拾','1'=>'元'];
$number_arr = [
    '1'=>'壹',
    '2'=>'贰',
    '3'=>'叁',
    '4'=>'肆',
    '5'=>'伍',
    '6'=>'陆',
    '7'=>'柒',
    '8'=>'捌',
    '9'=>'玖',
    '0'=>'零'];

if(strpos($num,'.')){
    $temp_num = explode('.',$num);
    $num_zheng = $temp_num[0];
    $num_ling  = $temp_num[1];

    $str_num = '';

    if(!empty($num_zheng)){//转换整数
        $arr_zheng = str_split($num_zheng);

        for($i = count($arr_zheng);$i>0;$i--){
            if(!empty($str_num) && (substr($str_num,-3) == '万') && (strpos($big_arr[$i],'万')!==false)){//为了去除万位以上多余的万字。
                $str_num = substr($str_num,0,strlen($str_num)-3);
            }

            if(strpos($str_num,'零')&&empty($arr_zheng[count($arr_zheng)-$i])){//去除多余的零

            }else if(0 == $arr_zheng[count($arr_zheng)-$i]){//去除单位
                $str_num.=$number_arr[$arr_zheng[count($arr_zheng)-$i]];
            }else{
                $str_num.=$number_arr[$arr_zheng[count($arr_zheng)-$i]].$big_arr[$i];
            }
        }
    }

    if(!empty($num_ling)){//转换小数
        $arr_ling = str_split($num_ling);
        if(empty($str_num)&&empty($arr_ling[0])){
            $str_num.=$number_arr[$arr_ling[1]].'分';
        }else if(empty($arr_ling[0])){
            $str_num.=$number_arr[$arr_ling[0]].$number_arr[$arr_ling[1]].'分';
        }else {
            $str_num.=$number_arr[$arr_ling[0]].'角'.$number_arr[$arr_ling[1]].'分';
        }
    }
}else{
    $str_num = '';
    if(!empty($num)){
        $arr_zheng = str_split($num);

        for($i = count($arr_zheng);$i>0;$i--){
            if(!empty($str_num) && (substr($str_num,-3) == '万') && (strpos($big_arr[$i],'万')!==false)){
                $str_num = substr($str_num,0,strlen($str_num)-3);
            }

            if(strpos($str_num,'零')&&empty($arr_zheng[count($arr_zheng)-$i])){

            }else if(0 == $arr_zheng[count($arr_zheng)-$i]){
                $str_num.=$number_arr[$arr_zheng[count($arr_zheng)-$i]];
            }else{
                $str_num.=$number_arr[$arr_zheng[count($arr_zheng)-$i]].$big_arr[$i];
            }

        }
    }
}

if(substr($str_num,-3) == '零'){
    $str_num = substr($str_num,0,strlen($str_num)-3);
}

echo $str_num;

 

以上 输出的结果为:伍亿捌千陆百肆十捌万零伍拾肆元零伍分

 

(需要注意的一点,PHP5.6之前的默认编码都是ISO-8859-1,5.6之后的才是UTF8,UTF8模式下,一个中文字符占3个字节,而ISO-8859-1则是按照一个字节进行处理。)

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值