• 【PHP】金额数字转换成大写形式


    <?php
    /*将数字金额转成大写*/
    function num_to_upper($num)
    {
        $d = array('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
        $e = array('元','拾','佰','仟','万','拾万','佰万','仟万','亿','拾亿','佰亿','仟亿','万亿');
        $p = array('分','角');
        $zheng='整'; //追加"整"字
        $final = array(); //结果
        $inwan=0; //是否有万
        $inyi=0; //是否有亿
        $len_pointdigit=0; //小数点后长度
        $y=0;
        if($c = strpos($num, '.')) {    //有小数点,$c为小数点前有几位数
            $len_pointdigit = strlen($num)-strpos($num, '.')-1; // 判断小数点后有几位数
            if($c>13) { //简单的错误处理 
                echo "数额太大,已经超出万亿.";
                die();
            } elseif($len_pointdigit>2) {   //$len_pointdigit小数点后有几位  
                echo "小数点后只支持2位.";
                die();
            }
        } else {    //无小数点  
            $c = strlen($num);
            $zheng = '整';
        }
        for($i=0;$i<$c;$i++) {  //处理整数部分
            $bit_num = substr($num, $i, 1); //逐字读取 左->右
            if($bit_num!=0 || substr($num, $i+1, 1)!=0) //当前是零 下一位还是零的话 就不显示
                @$low2chinses = $low2chinses.$d[$bit_num];
            if($bit_num || $i==$c-1) 
                @$low2chinses = $low2chinses.$e[$c-$i-1];
        }
        for($j=$len_pointdigit; $j>=1; $j--) {  //处理小数部分
            $point_num = substr($num, strlen($num)-$j, 1); //逐字读取 左->右
            if($point_num != 0)
                @$low2chinses = $low2chinses.$d[$point_num].$p[$j-1];
        //  if(substr($num, strlen($num)-2, 1)==0 && substr($num, strlen($num)-1, 1)==0) //小数点后两位都是0
        }
        $chinses = str_split($low2chinses,2); //字符串转换成数组
        //print_r($chinses);
        for($x=sizeof($chinses)-1;$x>=0;$x--) {     //过滤无效的信息
            if($inwan==0&&$chinses[$x]==$e[4]) {    //过滤重复的"万"
                $final[$y++] = $chinses[$x];
                $inwan=1;
            }
            if($inyi==0&&$chinses[$x]==$e[8]) {     //过滤重复的"亿"
                $final[$y++] = $chinses[$x];
                $inyi=1;
                $inwan=0;
            }
            if($chinses[$x]!=$e[4]&&$chinses[$x]!=$e[8]) //进行整理,将最后的值赋予$final数组
            $final[$y++] = $chinses[$x];
        }
        $newstring=(array_reverse($final)); //$final为倒数组,$newstring为正常可以使用的数组
        $nstring=join($newstring); //数组变成字符串
        if(substr($num,-2,1)==0 && substr($num,-1)<>0) {    //判断原金额角位为0 ? 分位不为0 ?
            $nstring=substr($nstring,0,(strlen($nstring)-4))."零".substr($nstring,-4,4); //这样加一个零字
        }
        $fen="分";
        $fj=substr_count($nstring, $fen); //如果没有查到分这个字
        return $nstring=($fj==0)?$nstring.$zheng:$nstring; //就将"整"加到后面
    }
    //示例
    echo num_to_upper(1500);
    //显示: 壹仟伍佰元整 
    ?>

    转载至:http://www.zh30.com/php-the-amount-of-digital-converted-to-uppercase 

  • 相关阅读:
    Delphi 窗体失踪在最上面的代码
    Delphi 目前使用delay函数功能
    Delphi Delay 延时计数的功能。 下面的方法都是思路,但是没有用在项目上
    Delphi 通过SQLite3, SQLiteTable3 操作数据库
    解决sqlite删除数据后,文件大小不变问题 转载
    delphi执行cmd命令和bat文件
    Delphi 获取sqlite中所有的表名
    delphi 获取USB口拔出和插入的状态
    深度揭密轮播插件核心代码的实现过程
    flowJS源码个人分析
  • 原文地址:https://www.cnblogs.com/zhucheer/p/3599587.html
Copyright © 2020-2023  润新知