最近同事们一起讨论技术问题,偶然间说到这个功能。工作也不忙,就试着写一下。具体代码如下:
$num = '586480054.05';
$big_arr = ['9'=>'亿','8'=>'千万','7'=>'百万','6'=>'十万','5'=>'万','4'=>'千','3'=>'百','2'=>'拾','1'=>'元'];
$number_arr = [
'1'=>'壹',
'2'=>'贰',
'3'=>'叁',
'4'=>'肆',
'5'=>'伍',
'6'=>'陆',
'7'=>'柒',
'8'=>'捌',
'9'=>'玖',
'0'=>'零'];
if(strpos($num,'.')){
$temp_num = explode('.',$num);
$num_zheng = $temp_num[0];
$num_ling = $temp_num[1];
$str_num = '';
if(!empty($num_zheng)){//转换整数
$arr_zheng = str_split($num_zheng);
for($i = count($arr_zheng);$i>0;$i--){
if(!empty($str_num) && (substr($str_num,-3) == '万') && (strpos($big_arr[$i],'万')!==false)){//为了去除万位以上多余的万字。
$str_num = substr($str_num,0,strlen($str_num)-3);
}
if(strpos($str_num,'零')&&empty($arr_zheng[count($arr_zheng)-$i])){//去除多余的零
}else if(0 == $arr_zheng[count($arr_zheng)-$i]){//去除单位
$str_num.=$number_arr[$arr_zheng[count($arr_zheng)-$i]];
}else{
$str_num.=$number_arr[$arr_zheng[count($arr_zheng)-$i]].$big_arr[$i];
}
}
}
if(!empty($num_ling)){//转换小数
$arr_ling = str_split($num_ling);
if(empty($str_num)&&empty($arr_ling[0])){
$str_num.=$number_arr[$arr_ling[1]].'分';
}else if(empty($arr_ling[0])){
$str_num.=$number_arr[$arr_ling[0]].$number_arr[$arr_ling[1]].'分';
}else {
$str_num.=$number_arr[$arr_ling[0]].'角'.$number_arr[$arr_ling[1]].'分';
}
}
}else{
$str_num = '';
if(!empty($num)){
$arr_zheng = str_split($num);
for($i = count($arr_zheng);$i>0;$i--){
if(!empty($str_num) && (substr($str_num,-3) == '万') && (strpos($big_arr[$i],'万')!==false)){
$str_num = substr($str_num,0,strlen($str_num)-3);
}
if(strpos($str_num,'零')&&empty($arr_zheng[count($arr_zheng)-$i])){
}else if(0 == $arr_zheng[count($arr_zheng)-$i]){
$str_num.=$number_arr[$arr_zheng[count($arr_zheng)-$i]];
}else{
$str_num.=$number_arr[$arr_zheng[count($arr_zheng)-$i]].$big_arr[$i];
}
}
}
}
if(substr($str_num,-3) == '零'){
$str_num = substr($str_num,0,strlen($str_num)-3);
}
echo $str_num;
以上 输出的结果为:伍亿捌千陆百肆十捌万零伍拾肆元零伍分
(需要注意的一点,PHP5.6之前的默认编码都是ISO-8859-1,5.6之后的才是UTF8,UTF8模式下,一个中文字符占3个字节,而ISO-8859-1则是按照一个字节进行处理。)