当前位置:博客首页>>PHP >> 阅读正文

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

作者: 郑晓 分类: PHP 发布于: 2012-07-11 13:22 浏览(6,129) 评论(3)


最近做财务的一个功能,其中有一个地方需要将阿拉伯数字形式的金额显示成大写(老写)的汉字形式,于是有了下面的代码。。。(要直接插入主题~)

<?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);
//显示: 壹仟伍佰元整
?>

php数字转换成大写

       

本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。

本文永久链接: https://www.zh30.com/php-the-amount-of-digital-converted-to-uppercase.html

【PHP】金额数字转换成大写形式:目前有3 条留言

用户评论头像 雪鹰翔天发表于 2014年03月01日 12:35[回复]

多谢了,正在找这个. 不过有点问题呢,
1234567890
->壹拾亿贰亿叁仟万肆佰万伍拾万陆万柒仟捌佰玖拾元整

如何修改

    用户评论头像 郑晓发表于 2014年03月01日 22:06[回复]

    你好,如果你的文件使用utf-8编码话,请将“字符串转换成数组”那里,把长度2修改为3。否则会拆分成乱码导致判断失败。

用户评论头像 旭光发表于 2012年07月15日 20:52[回复]

学习下,