`
hegz
  • 浏览: 437397 次
  • 性别: Icon_minigender_1
  • 来自: 茂名
社区版块
存档分类
最新评论

阿拉伯数字金额转大写人民币

    博客分类:
  • PHP
阅读更多

 

/**
 * 阿拉伯数字金额转大写人民币
 * 最大位数: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;
 }

 

 

 

0
1
分享到:
评论
2 楼 bardo 2011-04-17  
推荐
http://www.iteye.com/wiki/topic/983559
1 楼 lang8888511 2010-10-15  
很佩服楼主,谢谢了

相关推荐

Global site tag (gtag.js) - Google Analytics