php实现将人民币金额转大写的办法

本文介绍了一个PHP类,用于将阿拉伯数字转换为对应的中文大写金额,适用于财务系统中显示金额的需求。该类提供了ParseNumber方法,能够处理整数、小数及超过万亿级别的数字,确保了在各种场景下金额显示的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

class Num2Cny{
  static $basical=array(0=>'零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
  static $advanced=array(1=>'拾','佰','仟');
  public static function ParseNumber($number){
    $number=trim($number);
    if(!is_numeric($number)||intval($number)>999999999999) return 'error';
    if($number==0) return '零';
    if(strpos($number,'.')){
      $number=round($number,2);
      $data=explode('.',$number);
      $data[0]=self::int($data[0]);
      $data[1]=self::dec($data[1]);
      return $data[0].$data[1];
    }else{
      return self::int($number).'整';
    }
  }
  public static function int($number){
    $arr=array_reverse(str_split($number));
    $data='';
    $zero=false;
    $zero_num=0;
    foreach($arr as $k=>$v){
      $_chinese='';
      $zero=($v==0)?true:false;
      $x=$k%4;
      if($x && $zero && $zero_num>1)continue;
      switch($x){
        case 0:
          if($zero){
            $zero_num=0;
          }else{
            $_chinese=self::$basical[$v];
            $zero_num=1;
          }
          if($k==8){
            $_chinese.='亿';
          }elseif($k==4){
            $_chinese.='万';
          }
          break; 
        default:
          if($zero){
            if($zero_num==1){
              $_chinese=self::$basical[$v];
              $zero_num++;
            }
          }else{
            $_chinese=self::$basical[$v];
            $_chinese.=self::$advanced[$x];
          }
      }
      $data=$_chinese.$data;
    }
    return $data.'元';
  }
  public static function dec($number){
    if(strlen($number)<2) $number.='0';
    $arr=array_reverse(str_split($number));
    $data='';
    $zero_num=false;
    foreach($arr as $k=>$v){
      $zero=($v==0)?true:false;
      $_chinese='';
      if($k==0){
        if(!$zero){
          $_chinese=self::$basical[$v];
          $_chinese.='分';
          $zero_num=true;
        }
      }else{
        if($zero){
          if($zero_num){
            $_chinese=self::$basical[$v];
          }
        }else{
          $_chinese=self::$basical[$v];
          $_chinese.='角';
        }
      }
      $data=$_chinese.$data;
    }
    return $data;
  }
}

 使用过程也很简单,如下:
查看代码
打印
1    echo Num2Cny::ParseNumber(1234567.5);

结果将输出:

壹佰贰拾叁万肆仟伍佰陆拾柒元伍角

 

转自:http://www.phpernote.com/php-function/861.html

转载于:https://www.cnblogs.com/shanmao/p/3284502.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值