php实现将数字金额转换为大写人民币汉字

醉菜鸟 2022-04-23 08:00:03

/** 
 * 数字转人民币 
 * @param int|float $number 
 * 浮点数仅显示四位小数 * 
 * @return string 
 */
function num_rmb($number = 0){  
    $rmb_num = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'];    
    $big_unit = ['','万','亿','兆'];    $middle_unit = ['','拾','佰','仟'];    
    $small_unit = ['角','分','毫','厘'];    
    if (!preg_match('/[\d^\.]+/',$number)) return '输入格式有误';    
    if ($number >= 1e15) return '超出最大处理数字';    
    if ($number == 0) return $rmb_num[0].'圆整';    
    if(is_int($number)){        
        $int = $number;        
        $float= '';
    } else {        
        $nums = explode('.',number_format($number,'4','.',''));        
        $int = $nums[0];       
        $float= $nums[1];    
    }    
    $count = 0;    
    $rmb = '';    
    if( $int > 0 ){        
        $int_len = strlen($int);        
        for ($i = 0; $i < $int_len; $i++) {            
            $p = $int_len - $i - 1;            
            $h = $p / 4;
            $f = $p % 4; 
            if(($num = substr($int, $i, 1)) == '0'){                
                $count++;            
            }else{                
                $count > 0 && ($rmb.=$rmb_num[0]);                
                $count = 0;                
                $rmb.= $rmb_num[$num].$middle_unit[$f];            
            }            
            0 == $f && $count < 4 && ($rmb.= $big_unit[$h]);        
        }        
        $rmb.= '圆';    
    }    
    if ($float != ''){        
        $float_len = strlen($float);        
        for ($i = 0; $i < $float_len; $i++) {            
            $num = substr($float, $i, 1);            
            if($num != '0'){                
                $rmb.= $rmb_num[$num].$small_unit[$i];            
            }       
        }   
    }    
    if($rmb == ''){        
        $rmb.= $rmb_num[0].'圆整';    
    }    
    $rmb == '' ? $rmb.= $rmb_num[0].'圆整' : $float == '' && ($rmb.='整');    
    return $rmb;
}
意见反馈