急:请帮忙改多一个“零”,谢谢

frankwong 2013-01-18 11:07:12
今日在网上引用了一个js函数,是用于将阿拉伯数字金额转换为中文大写金额,如数字是100006012.05时,转换结果是:壹亿陆仟零壹拾贰元零五分,不过我们银行的会计人员说,正确必须是:壹亿零陆仟零壹拾贰元零五分!(亿之后多了一个“亿”字)
由于本人对js只是知道一些皮毛,请各位高手帮忙,解决这个问题,谢谢!js函数如下,请改好并标注改动部分,谢谢!



<script language="javascript"> function chineseNumber(num) { if (isNaN(num) || num > Math.pow(10, 12)) return ""var cn = "零壹贰叁肆伍陆柒捌玖"var unit = new Array("拾百千", "分角") var unit1= new Array("万亿", "") var numArray = num.toString().split(".") var start = new Array(numArray[0].length-1, 2) function toChinese(num, index) { var num = num.replace(/\d/g, function ($1) { return cn.charAt($1)+unit[index].charAt(start--%4 ? start%4 : -1) }) return num } for (var i=0; i<numArray.length; i++) { var tmp = ""for (var j=0; j*4<numArray[i].length; j++) { var strIndex = numArray[i].length-(j+1)*4var str = numArray[i].substring(strIndex, strIndex+4) var start = i ? 2 : str.length-1var tmp1 = toChinese(str, i) tmp1 = tmp1.replace(/(零.)+/g, "零").replace(/零+$/, "") tmp1 = tmp1.replace(/^壹拾/, "拾") tmp = (tmp1+unit1[i].charAt(j-1)) + tmp } numArray[i] = tmp } numArray[1] = numArray[1] ? numArray[1] : ""numArray[0] = numArray[0] ? numArray[0]+"元" : numArray[0], numArray[1] = numArray[1].replace(/^零+/, "零") numArray[1] = numArray[1].match(/分/) ? numArray[1] : numArray[1]+"整"return numArray[0]+numArray[1] } alert(chineseNumber(100006012.05)); </script>

...全文
321 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
scscms太阳光 2013-01-18
  • 打赏
  • 举报
回复
numArray[0] = numArray[0] ? numArray[0] + "元" : numArray[0], numArray[1] = numArray[1].replace(/^零+/, "");把红色的删除。即: numArray[0] = numArray[0] ? numArray[0] + "元" : numArray[0], numArray[1] = numArray[1].replace(/^零+/, "");
fw347969680 2013-01-18
  • 打赏
  • 举报
回复
好像js的代码没贴全吧。
打字员 2013-01-18
  • 打赏
  • 举报
回复
入个伙

	function parseChinese(n) {
		var c = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"];
		var p = ["分","角","元","拾","百","千","万","拾","百","千","亿","拾","百","千"];
		var temp = (/^(0|[1-9])\d*(\.\d+)?$/).test(n)? n : null;
		var i = -1;
		var result = null;
		if(temp) {
			temp = parseFloat(temp).toFixed(2);
			i = (/\.\d+$/).test(temp)? -1 : 1;
			result = temp.toString().replace(/\./g, "").split("").reverse().join("").replace(/\d/g, function(a) {i++; return p[i] + c[a]}).split("").reverse().join("").replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/(千|百|拾)零(元|万|亿)/g,"$1$2").replace(/(亿零)万/g, "$1").replace(/(万零)元/g, "$1").replace(/(零)+/g, "零").replace(/(亿)零(元)/g, "$1$2").replace(/元((零角)*零分|)$/g, "元整");
		}
		return result;
	}
	
	alert(parseChinese(100006012.05));
frankwong 2013-01-18
  • 打赏
  • 举报
回复
引用 6 楼 datiexiong 的回复:
死教条主义。 把这行 JavaScript code ? 1 return (numArray[0]+numArray[1]).replace(/^零/,"").replace(/亿万/,"亿") 给成就完事了 JavaScript code ? 1 return (numArray[0]+numArray[1]).replace……
to 爱若如梦:你的方法可以解决了我的问题,因为这个函数比较特殊,需要会计人员反复验证,所以需要谨慎一点!
爱若如梦 2013-01-18
  • 打赏
  • 举报
回复
死教条主义。 把这行
return (numArray[0]+numArray[1]).replace(/^零/,"").replace(/亿万/,"亿")
给成就完事了
return (numArray[0]+numArray[1]).replace(/^零/,"").replace(/亿万/,"亿零"
)
oxfed 2013-01-18
  • 打赏
  • 举报
回复
3楼正解,很流畅
frankwong 2013-01-18
  • 打赏
  • 举报
回复
引用 2 楼 xzy21com 的回复:
numArray[0] = numArray[0] ? numArray[0] + "元" : numArray[0], numArray[1] = numArray[1].replace(/^零+/, "零");把红色的零删除。即: numArray[0] = numArray[0] ? numArray[0] + "元" : numArray[0], numArray[1] = nu……
to xzy21com :按你的方法,结果连“万”后面和小数点后面的“零”也不显示了! 重新上传我这里最新最完整js代码,如下代码是按我们会计部门要求,经过多次修正后的,请大侠使用以下代码按题目要求给予修改测试,无尽感谢! 题目要求是:如数字是100006012.05时,转换结果是:壹亿陆仟零壹拾贰元零五分,不过我们银行的会计人员说,正确必须是:壹亿零陆仟零壹拾贰元零五分!(亿之后要多了一个“零”字) <script language="javascript"> function chineseNumber(num) ///数字转换大写 { if (isNaN(num) || num > Math.pow(10, 12)) return "" if (num==0) return "零元整" var cn = "零壹贰叁肆伍陆柒捌玖" var unit = new Array("拾佰仟", "分角") var unit1= new Array("万亿", "") var numArray = num.toString().split(".") var start = new Array(numArray[0].length-1, 2) function toChinese(num, index) { var num = num.replace(/\d/g, function ($1) { return cn.charAt($1)+unit[index].charAt(start--%4 ? start%4 : -1) }) return num } for (var i=0; i<numArray.length; i++) { var tmp = "" for (var j=0; j*4<numArray[i].length; j++) { var strIndex = numArray[i].length-(j+1)*4 var str = numArray[i].substring(strIndex, strIndex+4) var start = i ? 2 : str.length-1 var tmp1 = toChinese(str, i) tmp1 = tmp1.replace(/(零.)+/g, "零").replace(/零+$/, "") //tmp1 = tmp1.replace(/^壹拾/, "拾") tmp = (tmp1+unit1[i].charAt(j-1)) + tmp } numArray[i] = tmp } numArray[1] = numArray[1] ? numArray[1] : "" numArray[0] = numArray[0] ? numArray[0]+"元" : numArray[0], numArray[1] //= numArray[1].replace(/^零+/, "") numArray[1] = numArray[1].match(/分/) ? numArray[1] : numArray[1]+"整" return (numArray[0]+numArray[1]).replace(/^零/,"").replace(/亿万/,"亿") } </script>
爱若如梦 2013-01-18
  • 打赏
  • 举报
回复
换一个例子,改了一下,可用
function DX(n) { //金额大写转换函数
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n))
return "数据非法";
var unit = "千百拾亿千百拾万千百拾元角分", str = "";
n += "00";
var p = n.indexOf('.');
if (p >= 0)
n = n.substring(0, p) + n.substr(p+1, 2);
unit = unit.substr(unit.length - n.length);
for (var i=0; i < n.length; i++)
str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零万/g,"零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
}

alert(DX(100006012.05));

87,904

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧