php 阿拉伯数字转中文数字 方法
<?php
function ch_num($num,$mode=true) {
$char = array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
$dw = array("","拾","佰","仟","","萬","億","兆");
$dec = "點";
$retval = "";
if($mode)
preg_match_all("/^0*(/d*)/.?(/d*)/",$num, $ar);
else
preg_match_all("/(/d*)/.?(/d*)/",$num, $ar);
if($ar[2][0] != "")
$retval = $dec . ch_num($ar[2][0],false); //如果有小数,先递归处理小数
if($ar[1][0] != "") {
$str = strrev($ar[1][0]);
for($i=0;$i<strlen($str);$i++) {
$out[$i] = $char[$str[$i]];
if($mode) {
$out[$i] .= $str[$i] != "0"? $dw[$i%4] : "";
if($str[$i]+$str[$i-1] == 0)
$out[$i] = "";
if($i%4 == 0)
$out[$i] .= $dw[4+floor($i/4)];
}
}
$retval = join("",array_reverse($out)) . $retval;
}
return $retval;
}
//echo ch_num("12345006789001.123");
//echo ch_num("880079.1234");
echo ch_num("300045.0123");
这个方法更为优秀一些.
function toCNcap($data){
$capnum=array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
$capdigit=array("","拾","佰","仟");
$subdata=explode(".",$data);
$yuan=$subdata[0];
$j=0; $nonzero=0;
for($i=0;$i<strlen($subdata[0]);$i++){
if(0==$i){ //确定个位
if($subdata[1]){
$cncap=(substr($subdata[0],-1,1)!=0)?"元":"元零";
}else{
$cncap="元";
}
}
if(4==$i){ $j=0; $nonzero=0; $cncap="万".$cncap; } //确定万位
if(8==$i){ $j=0; $nonzero=0; $cncap="亿".$cncap; } //确定亿位
$numb=substr($yuan,-1,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;
}
?>