/**
* 阿拉伯数字金额转大写人民币
* 最大位数:999999999999.99
*
* @param number $data
* @return string
* @author hegz
* @date 2010/05/23
*/
function numToRmb($data)
{
$capnum = array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
$capdigit = array("","拾","佰","仟");
$subdata = explode(".", $data);
$yuan = $subdata[0];
$yaun_len = strlen($yuan);
if ($yaun_len > 12) {
return "数字字串整数部分不能大于12位。";
}
/**
* 处理整数部分
*/
$j = 0;
$nonzero = 0;
$cncap = '';
if ((int)$yuan > 0) {
for ($i = 0; $i < $yaun_len; $i++) {
// 确定个位
if ($i == 0) {
$cncap .= "元";
}
//确定万位
if ($i == 4) {
$j = 0;
$nonzero = 0;
$cncap = "万" . $cncap;
}
//确定亿位
if ($i == 8) {
$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++;
}
}
$cncap = preg_replace("/(零)+/", "\\1", $cncap); // 合并连续“零”
/**
* 处理小数部分
*
* 处理“00”、“?0”、“0?”、“??”这四种情形的值
*/
if (isset($subdata[1])) {
$jiao = substr($subdata[1],0,1);
$fen = substr($subdata[1],1,1);
$jiao_val = (int)$jiao;
$fen_val = (int)$fen;
$xs = '';
if ($jiao_val == 0 && $fen_val == 0) {
$xs = '整';
} elseif ($jiao_val > 0 && $fen_val == 0) {
$xs = $capnum[$jiao_val] . '角';
} elseif ($jiao_val == 0 && $fen_val > 0) {
$xs = ((int)$yuan) ? '零' . $capnum[$fen_val] . '分' : $capnum[$fen_val] . '分';
} else {
$xs = $capnum[$jiao_val] . '角' . $capnum[$fen_val] . '分';
}
}
$cncap .= $xs;
return $cncap;
}