硅谷论坛's Archiver

蓝冰 发表于 2007-5-16 10:19

一个阿拉伯数字转中文数字的函数

最近因需要,写了个“阿拉伯数字转中文数字的函数”。搜索了精华区只见到一个类似的。<BR>感觉到我的算法不错,所以贴出来共享一下<BR>如果要用于金额的转换,对小数部分的处理要做一下修改<BR>&lt;?php<BR>function ch_num($num,$mode=true) {<BR>$char = array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");<BR>$dw = array("","拾","佰","仟","","?","?","兆");<BR>$dec = "?";<BR>$retval = "";<BR><BR>if($mode)<BR>preg_match_all("/^0*(/d*)/.?(/d*)/",$num, $ar);<BR>else<BR>preg_match_all("/(/d*)/.?(/d*)/",$num, $ar);<BR><BR>if($ar[2][0] != "")<BR>$retval = $dec . ch_num($ar[2][0],false); //如果有小数,先递归处理小数<BR>if($ar[1][0] != "") {<BR>$str = strrev($ar[1][0]);<BR>for($i=0;$i&lt;strlen($str);$i++) {<BR>$out[$i] = $char[$str[$i]];<BR>if($mode) {<BR>$out[$i] .= $str[$i] != "0"? $dw[$i%4] : "";<BR>if($str[$i]+$str[$i-1] == 0)<BR>$out[$i] = "";<BR>if($i%4 == 0)<BR>$out[$i] .= $dw[4+floor($i/4)];<BR>}<BR>}<BR>$retval = join("",array_reverse($out)) . $retval;<BR>}<BR>return $retval;<BR>}<BR><BR>//echo ch_num("12345006789001.123");<BR>//echo ch_num("880079.1234");<BR>echo ch_num("300045.0123");<BR><BR>?&gt;<BR>

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.