大家好,现有个财务问题:如何自动显示对应的数字的中文名称呢?比如:
USD 53,621.35 如何做才能自动显示出: 美元伍万叁仟陆佰贰拾壹元叁角伍分
这个前面的币种和后面单个的数字可以用数组去对应,但这个分段出来的万啊仟啊佰啊的怎么弄哦??还有那个角分什么的...
@~@有弄过的指点下小弟...多谢各位了!

解决方案 »

  1.   

    <?php 
    function num2ch($num) 

    if($num == '0') return '零'; 
     
    $chs = array('0','壹','贰','叁','肆','伍','陆','柒','捌','玖'); 
    $uni = array('','拾','佰','仟'); 
    $exp = array('','万'); 
    $num.= ''; 
    $res = '';   
    for($i=strlen($num)-1,$k=0;$i>=0;$k++) 

        $str = ''; 
       //按照中文读写习惯,每4个字为一段进行转化 
        for($j=0;$j<4 && $i>=0;$j++,$i--) 
        { 
            $u = $num{$i}>0? $uni[$j] : '';//非0的数字后面添加单位 
            $str = $chs[$num{$i}].$u.$str; 
       }        
       $str = preg_replace("/0+$/","",$str);//去掉末尾的0 
        $str = preg_replace("/0+/","零",$str);//替换0 
        if( !isset($exp[$k]) ) $exp[$k] = $exp[$k-2].'亿';//构建单位 
       $u2 = $str!=''? $exp[$k] : ''; 
        $res = $str.$u2.$res;                        

    return $res; 

    print_r(num2ch('53,621.35'));
      

  2.   

    你自己会写判断USD 是美元么?不会写让一楼帮你,哈哈
      

  3.   

    不好意思,一个用户只允许连续回复3次,换个用户回复你
    这次ok了
    <?php 
    function numberTocncap($data){
       $capnum = array( "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" );
       $capdigit = array( "", "拾", "佰", "仟" );
       $subdata = explode( ".", $data );
       $yuan = $subdata[0];
       $j = 0;
       $nonzero = 0;
       for( $i=0; $i<strlen($subdata[0]); $i++ ){
          if( $i==0 ){ //确定个位 
             if($subdata[1]){ 
                $cncap = (substr($subdata[0],-1,1)!=0) ? "元" : "元零";
             }else{
                $cncap = "元";
             }
          }
          if( $i==4 ){ //确定万位
                $j = 0;
                $nonzero = 0;
                $cncap = "万" . $cncap; 
          } 
          if($i==8){ //确定亿位
                $j = 0;
                $nonzero = 0;
                $cncap = "亿" . $cncap; 
          }
          $numb = substr($yuan,-2,1); //截取尾数
          $cncap = ($numb) ? $capnum[$numb].$capdigit[$j].$cncap : (($nonzero)?" ".$cncap:$cncap);
          $nonzero = ($numb) ? 1 : $nonzero;
          $yuan = substr($yuan,0,strlen($yuan)-1); //截去尾数      
          $j++;
       }    
       if($subdata[1]){
         $chiao=(substr($subdata[1],0,1))?$capnum[substr($subdata[1],0,1)]."角":"零";
         $cent=(substr($subdata[1],1,1))?$capnum[substr($subdata[1],1,1)]."分":"零分";
       }
       $cncap .= $chiao.$cent;
       $cncap = preg_replace("/(零)+/","\\1",$cncap); //合并连续"零"
       return $cncap;
    }print_r(numberTocncap('53,621.35'));伍万叁仟佰陆拾贰元叁角伍分
      

  4.   

    <?php
    $_CHINESE=array('零','一','二','三','四','五','六','七','八','九');
    $_UNIT = array('角', '分', '千', '百', '拾', '元', '万', '億', '万億');
    function convertCurrency($num)
    {
        global $_CHINESE, $_UNIT;
        $result = '';
        $data = explode('.', str_replace(',', '', $num));
        $int = str_pad($data[0], ceil(strlen($data[0]) / 4) * 4, '0', STR_PAD_LEFT);
        $decimal = count($data) == 2 ? $data[1] : '';    $a = str_split($int, 4);
        $i = count($a) - 1;
        foreach($a as $v)
        {
            if (preg_match('/^0+$/', $v)) {
                if ($i == 0) {
                    $result = trim($result, $_CHINESE[0]);
                    $result .= $_UNIT[$i + 5];
                    break;
                }
                $result .= $_CHINESE[0];
                --$i;
                continue;
            }
            $result .= convertInt($v) . $_UNIT[$i + 5];
            --$i;
        }
        $result = trim($result.convertDecimal($decimal), $_CHINESE[0]);
        $result = preg_replace('/('.preg_quote($_CHINESE[0]).')+/', $_CHINESE[0], $result);
        return $result;
    }
    function convertInt($num)
    {
        global $_CHINESE, $_UNIT;
        $t = $_CHINESE[($num / 1000) % 10] . (($num / 1000) % 10 == 0 ? '' : $_UNIT[2]);
        if ($num % 1000 == 0) return $t;
        $h = $_CHINESE[($num / 100) % 10] . (($num / 100)  % 10 == 0 ? '' : $_UNIT[3]);
        if ($num % 100 == 0) return $t.$h;
        $n = $_CHINESE[($num / 10) % 10] .  (($num / 10)   % 10 == 0 ? '' : $_UNIT[4]);
        if ($num % 10 == 0) return $t.$h.$n;
        return $t.$h.$n . ($num % 10 == 0 ? '' : $_CHINESE[$num % 10]);
    }function convertDecimal($decimal)
    {
        global $_CHINESE, $_UNIT;
        $result = '';
        if (strlen($decimal) > 0 && $decimal{0} > 0) {
            $result .= $_CHINESE[$decimal{0}] . $_UNIT[0];
        }
        if (strlen($decimal) > 1 && $decimal{1} > 0) {
            $result .= $_CHINESE[$decimal{1}] . $_UNIT[1];
        }
        return $result;
    }echo convertCurrency('53,621.35') . '<br>';
    echo convertCurrency('123,456,789') . '<br>';
    echo convertCurrency('123,456,789.25') . '<br>';
    echo convertCurrency('123,456,789.2') . '<br>';
    echo convertCurrency('120,000,001.05') . '<br>';
    echo convertCurrency('1,200,000,000,000') . '<br>';?>
    五万三千六百二拾一元三角五分
    一億二千三百四拾五万六千七百八拾九元
    一億二千三百四拾五万六千七百八拾九元二角五分
    一億二千三百四拾五万六千七百八拾九元二角
    一億二千万零一元五分
    一万億二千億元
      

  5.   

    Meteorlet兄的这个可行哦,应该不会再有什么特例出来了....
      

  6.   

    zhonghuarenmin1986兄,非常感谢你的积极帮忙! 
    你写的这个进制位会倒过来,不信你打印下,562会显示伍佰拾陆贰,我调整了下还是没有搞定...