js 数字转人民币大写

目前网上有许多的数字转人民币大写功能,但是在某些数字上就回出现错误,

比如501356,这个转换之后,有的会转换成 “伍拾万壹仟叁佰伍拾陆” ,单位万和千紧密相连,中间是不需要 “零” 的。 (属于个人见解).

具体代码如下,贴出整个页面


<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script type='text/javascript'>
   intChars= prompt("请输入数字:","20");
   _char=toChars(intChars);
   alert(_char);
   //传入数字,转成人民币大写 如1234.5=》 壹仟贰佰叁拾肆元伍角
 
   
	function toChars(chars){
		var _MaxNumber = 99999999999.99; 
		// 判断输入格式
		chars = chars.toString(); 
		if (chars == "") { 
			alert("不能为空 请输入数字金额!如:123.23"); 
			return ""; 
		} 
	  
		if ((chars).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) == null) { 
			alert("请输入正确的数字!"); 
			return ""; 
		} 
		 
		//标准化输入数字格式
		chars = chars.replace(/,/g, "");    //删除逗号分隔符。
		chars = chars.replace(/^0+/, "");    //替换掉数字开头的0;

		//判断数字长度不超过最大长度
		if (Number(chars) > _MaxNumber) { 
			alert("超出限定数字长度"); 
			return ""; 
		} 
		return GetChar(chars);
	}

	function GetChar(chars) { 
		var CN_SYMBOL = ""; 
		var integral;    //整数
		var decimal;     //小数 
		var outChars;    //输出字符
		 
		//从货币数字的转换
		//整数和小数部分分离处理 
		var parts = chars.split("."); 
		if (parts.length > 1) { 
			integral = parts[0]; 
			decimal = parts[1]; 
			//获取小数位后两位
			decimal = decimal.substr(0, 2); 
		} 
		else { 
			integral = parts[0]; 
			decimal = ""; 
		} 
		outChars=GetInteger(integral);
		
		// 确认并输出最终返回字符串
		outChars =outChars == ""? '零元':outChars + GetDecimals(decimal); 
		outChars = CN_SYMBOL+ outChars; 
		return outChars; 
	} 

    //得到整数部分
    function GetInteger(integral)
	{
		var i, p, d; 
		var quotient, modulus;
		var _digits, _radices, _bigRadices
		//准备相应的数字特征数组
		_digits = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']; 
		_radices =['','拾','佰','仟'];
		_bigRadices =['','万','亿'];
		
		//---开始-----
		outChars = ""; 
		//判断大于0的处理
		if (Number(integral) > 0) { 
			var _count = 0; 
			for (i = 0; i < integral.length; i++) { 
				p = integral.length - i - 1; 
				d = integral.substr(i, 1); 
				quotient = p / 4; 
				modulus = p % 4; 
				if (d == "0") { 
					_count++; 
				} 
				else { 
					if (_count > 0) 
					{ 
						outChars += _digits[0]; 
					} 
					_count = 0; 
					outChars += _digits[Number(d)] + _radices[modulus]; 
				} 
				if (modulus == 0 && _count < 4) { 
					outChars += _bigRadices[quotient]; 
					
					_count=0;
				} 
			} 
			outChars += '元'; 
		} 
		return outChars;
	}
    
	//得到小数部分
	function GetDecimals(decimal){
		var _decimals =['角','分'];
		var _digits = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']; 
		var outChars="";
		//处理小数部分
		if (decimal != "") { 
			for (i = 0; i < decimal.length; i++) { 
				d = decimal.substr(i, 1); 
				if (d != "0") { 
					outChars += _digits[Number(d)] + _decimals[i]; 
				} 
			} 
		} 
		
		if (decimal == ""||Number(decimal)==0) { 
			outChars += '整'; 
		} 
		return outChars;
	}

</script>
</head>
<body>
</body>
</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答这个问题。 Oracle中可以使用PL/SQL代码将数字换为人民币大写。以下是一个示例代码: ``` CREATE OR REPLACE FUNCTION f_num2rmb(p_num IN NUMBER) RETURN VARCHAR2 IS l_num NUMBER := TRUNC(p_num); l_dec NUMBER(2,0) := TRUNC(MOD(p_num, 1) * 100); l_rmb VARCHAR2(200); l_unit CONSTANT VARCHAR2(10) := '元'; l_decimal CONSTANT VARCHAR2(10) := '角分'; l_numstr CONSTANT VARCHAR2(50) := '零壹贰叁肆伍陆柒捌玖'; l_unitstr CONSTANT VARCHAR2(50) := '仟佰拾'; l_decimalstr CONSTANT VARCHAR2(50) := '分角'; BEGIN IF l_num = 0 AND l_dec = 0 THEN RETURN '零元整'; END IF; l_rmb := TO_CHAR(l_dec, 'FM00') || l_decimal; FOR i IN 1..4 LOOP l_unitstr := SUBSTR(l_unitstr, 2); IF l_num = 0 THEN EXIT; END IF; l_rmb := SUBSTR(l_numstr, MOD(TRUNC(l_num / POWER(10, (4 - i) * 4)), 10) + 1, 1) || l_unitstr || l_rmb; l_num := TRUNC(l_num / 10); END LOOP; l_rmb := REPLACE(l_rmb, '零仟', '零'); l_rmb := REPLACE(l_rmb, '零佰', '零'); l_rmb := REPLACE(l_rmb, '零拾', '零'); l_rmb := REPLACE(l_rmb, '零零零', '零'); l_rmb := REPLACE(l_rmb, '零零', '零'); l_rmb := REPLACE(l_rmb, '零角零分', '整'); IF SUBSTR(l_rmb, 1, 1) = '零' THEN l_rmb := SUBSTR(l_rmb, 2); END IF; RETURN l_rmb || l_unit || '整'; END; / ``` 使用该函数,可以将数字换为人民币大写。例如: ``` SELECT f_num2rmb(12345.67) FROM DUAL; ``` 输出结果为: ``` 壹万贰仟叁佰肆拾伍元陆角柒分整 ``` 这个函数的代码实现比较复杂,但是可以通过调用该函数来轻松地将数字换为人民币大写

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值