求一个js 金额转人民币大写的方法 代码简易,不累赘网上找了一个,测试都有问题。 有漏洞 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 jQuery.extend({ toRMB: function(num) { var stmp = ""; if (num === stmp) return; if (isNaN(num)) { alert("不是数字"); } else { var ms = num.replace(/[^\\d\\.]/g, "").replace(/(\\.\\d{2}).+$/, "$1").replace(/^0+([1-9])/, "$1").replace(/^0+$/, "0"); var ms = num; var txt = ms.split("."); while (/\\d{4}(,|$)/.test(txt[0])) txt[0] = txt[0].replace(/(\\d)(\\d{3}(,|$))/, "$1,$2"); stmp = txt[0] + (txt.length > 1 ? "." + txt[1] : ""); return number2num1(ms - 0); } function number2num1(strg) { var number = Math.round(strg * 100) / 100; number = number.toString(10).split("."); var a = number[0]; if (a.length > 12) { return "数值超出范围!支持的最大数值为 999999999999.99"; } else { var e = "零壹贰叁肆伍陆柒捌玖"; var num1 = ""; var len = a.length - 1; for (var i = 0; i <= len; i++) num1 += e.charAt(parseInt(a.charAt(i))) + [["圆", "万", "亿"][Math.floor((len - i) / 4)], "拾", "佰", "仟"][(len - i) % 4]; if (number.length == 2 && number[1] != "") { var a = number[1]; for (var i = 0; i < a.length; i++) num1 += e.charAt(parseInt(a.charAt(i))) + ["角", "分"][i]; } num1 = num1.replace(/零佰|零拾|零仟|零角/g, "零"); num1 = num1.replace(/零{2,}/g, "零"); num1 = num1.replace(/零(?=圆|万|亿)/g, ""); num1 = num1.replace(/亿万/, "亿"); num1 = num1.replace(/^圆零?/, ""); if (num1 != "" && !/分$/.test(num1)) num1 += "整"; return num1; } } }});你可以适当调整一下 <script>// function regInput(e,reg)//{//e=e||event;//var srcElem = e.srcElement||e.target;//var oSel = document.selection.createRange();//oSel = oSel.duplicate()//oSel.text = ""//var srcRange = srcElem.createTextRange()//oSel.setEndPoint("StartToStart", srcRange)//var num = oSel.text + String.fromCharCode(event.keyCode) + srcRange.text.substr(oSel.text.length);//event.returnvalue = reg.test(num);//}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]}function aNumber(num){var numArray = new Array()var unit = "亿万圆$"for (var i=0; i<unit.length; i++){var re = eval("/"+ (numArray[i-1] ? unit.charAt(i-1) : "") +"(.*)"+unit.charAt(i)+"/")if (num.match(re)){numArray[i] = num.match(re)[1].replace(/^拾/, "壹拾")numArray[i] = numArray[i].replace(/[零壹贰叁肆伍陆柒捌玖]/g, function ($1){return "零壹贰叁肆伍陆柒捌玖".indexOf($1)})numArray[i] = numArray[i].replace(/[分角拾佰仟]/g, function ($1){return "*"+Math.pow(10, "分角 拾佰仟 ".indexOf($1)-2)+"+"}).replace(/^\*|\+$/g, "").replace(/整/, "0")numArray[i] = "(" + numArray[i] + ")*"+Math.ceil(Math.pow(10, (2-i)*4))}else numArray[i] = 0}return eval(numArray.join("+"))}</script><!--onkeypress="regInput(event,/^\d{0,12} (\. \d{0,2})?$/)"--><input id=up size=60 ><button onclick="lw.value = chineseNumber(up.value)">转为大写</button><br><input id=lw size=60 value="壹仟壹佰壹拾壹圆整"><button onclick="up.value = aNumber(lw.value)">转为小写</button> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title>test</title></head><body> <input id="input" type="text" value="" /> <span id="output"></span> <script> var numChineses = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']; units = ['','十','百','千'], steps = ['','万','亿']; document.getElementById('input').onchange = function(){ var val = this.value.replace(/\D+/g, ''); this.value = val; var arr = val.split('').reverse(); var str = '元'; if(arr.length > 16){ alert('面额太大'); return; } for(var i in arr){ if(i%4 !== 0){ str = numChineses[parseInt(arr[i])] + units[i%4] + str; }else{ var stepIndex = Math.floor(i/4); stepIndex = stepIndex > 2 ? (stepIndex - 2) : stepIndex; str = numChineses[parseInt(arr[i])] + steps[stepIndex] + str; } } document.getElementById('output').innerHTML = str; } </script></body></html> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head> <title>test</title></head><body> <input id="input" type="text" value="" /> <div> <span>金额:</span> <span id="output"></span> </div> <script> function toRMB(amount){ if(amount.length > 16){ return '面额太大'; } var numChineses = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']; units = ['','十','百','千'], steps = ['圆','万','亿'], str = ' 整'; var arr = amount.split('').reverse(); for(var i in arr){ if(i%4 !== 0){ str = numChineses[parseInt(arr[i])] + units[i%4] + str; }else{ var stepIndex = Math.floor(i/4); stepIndex = stepIndex > 2 ? (stepIndex - 2) : stepIndex; str = numChineses[parseInt(arr[i])] + steps[stepIndex] + str; } } return str; } var ouput = document.getElementById('output'); document.getElementById('input').onchange = function(){ var val = this.value.replace(/^0+|\D+/g, ''); this.value = val; ouput.innerHTML = toRMB(val); } </script></body></html> FF下try catch奇异现象~求解答 jQuery apply问题。。 如何让弹出菜单显示在主页最上层 JQUERY10.0.2在IE9、8的兼容性模式下运行不正常 请问在JavaScrip中有没有字符串替换函数 我想實現 listbox 要怎麼做??? 我要的不是下拉的,謝謝!!!!!! exe捆绑到网页 碰到一些非常奇怪的javascrip求解释 请问怎样根据条件判断文字链接 求助table内节点取得的问题 WEB中使用SOCKET的问题,请高手指点
toRMB: function(num) {
var stmp = "";
if (num === stmp)
return;
if (isNaN(num)) {
alert("不是数字");
} else {
var ms = num.replace(/[^\\d\\.]/g, "").replace(/(\\.\\d{2}).+$/, "$1").replace(/^0+([1-9])/, "$1").replace(/^0+$/, "0");
var ms = num;
var txt = ms.split(".");
while (/\\d{4}(,|$)/.test(txt[0]))
txt[0] = txt[0].replace(/(\\d)(\\d{3}(,|$))/, "$1,$2");
stmp = txt[0] + (txt.length > 1 ? "." + txt[1] : "");
return number2num1(ms - 0);
}
function number2num1(strg) {
var number = Math.round(strg * 100) / 100;
number = number.toString(10).split(".");
var a = number[0];
if (a.length > 12) {
return "数值超出范围!支持的最大数值为 999999999999.99";
} else {
var e = "零壹贰叁肆伍陆柒捌玖";
var num1 = "";
var len = a.length - 1;
for (var i = 0; i <= len; i++)
num1 += e.charAt(parseInt(a.charAt(i))) + [["圆", "万", "亿"][Math.floor((len - i) / 4)], "拾", "佰", "仟"][(len - i) % 4];
if (number.length == 2 && number[1] != "") {
var a = number[1];
for (var i = 0; i < a.length; i++)
num1 += e.charAt(parseInt(a.charAt(i))) + ["角", "分"][i];
}
num1 = num1.replace(/零佰|零拾|零仟|零角/g, "零");
num1 = num1.replace(/零{2,}/g, "零");
num1 = num1.replace(/零(?=圆|万|亿)/g, "");
num1 = num1.replace(/亿万/, "亿");
num1 = num1.replace(/^圆零?/, ""); if (num1 != "" && !/分$/.test(num1))
num1 += "整";
return num1;
}
} }
});你可以适当调整一下
<script>
// function regInput(e,reg)
//{
//e=e||event;
//var srcElem = e.srcElement||e.target;
//var oSel = document.selection.createRange();
//oSel = oSel.duplicate()
//oSel.text = ""
//var srcRange = srcElem.createTextRange()
//oSel.setEndPoint("StartToStart", srcRange)
//var num = oSel.text + String.fromCharCode(event.keyCode) + srcRange.text.substr(oSel.text.length);
//event.returnvalue = reg.test(num);
//}
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)*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]
}function aNumber(num)
{
var numArray = new Array()
var unit = "亿万圆$"
for (var i=0; i<unit.length; i++)
{
var re = eval("/"+ (numArray[i-1] ? unit.charAt(i-1) : "") +"(.*)"+unit.charAt(i)+"/")
if (num.match(re))
{
numArray[i] = num.match(re)[1].replace(/^拾/, "壹拾")
numArray[i] = numArray[i].replace(/[零壹贰叁肆伍陆柒捌玖]/g, function ($1)
{
return "零壹贰叁肆伍陆柒捌玖".indexOf($1)
})
numArray[i] = numArray[i].replace(/[分角拾佰仟]/g, function ($1)
{
return "*"+Math.pow(10, "分角 拾佰仟 ".indexOf($1)-2)+"+"
}).replace(/^\*|\+$/g, "").replace(/整/, "0")
numArray[i] = "(" + numArray[i] + ")*"+Math.ceil(Math.pow(10, (2-i)*4))
}
else numArray[i] = 0
}
return eval(numArray.join("+"))
}
</script>
<!--onkeypress="regInput(event,/^\d{0,12} (\. \d{0,2})?$/)"-->
<input id=up size=60 ><button onclick="lw.value = chineseNumber(up.value)">转为大写</button><br>
<input id=lw size=60 value="壹仟壹佰壹拾壹圆整"><button onclick="up.value = aNumber(lw.value)">转为小写</button>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
</head>
<body>
<input id="input" type="text" value="" />
<span id="output"></span>
<script>
var numChineses = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'];
units = ['','十','百','千'],
steps = ['','万','亿'];
document.getElementById('input').onchange = function(){
var val = this.value.replace(/\D+/g, '');
this.value = val;
var arr = val.split('').reverse();
var str = '元';
if(arr.length > 16){
alert('面额太大');
return;
}
for(var i in arr){
if(i%4 !== 0){
str = numChineses[parseInt(arr[i])] + units[i%4] + str;
}else{
var stepIndex = Math.floor(i/4);
stepIndex = stepIndex > 2 ? (stepIndex - 2) : stepIndex;
str = numChineses[parseInt(arr[i])] + steps[stepIndex] + str;
}
}
document.getElementById('output').innerHTML = str;
}
</script>
</body>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test</title>
</head>
<body>
<input id="input" type="text" value="" />
<div>
<span>金额:</span>
<span id="output"></span>
</div>
<script>
function toRMB(amount){
if(amount.length > 16){
return '面额太大';
}
var numChineses = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'];
units = ['','十','百','千'],
steps = ['圆','万','亿'],
str = ' 整';
var arr = amount.split('').reverse();
for(var i in arr){
if(i%4 !== 0){
str = numChineses[parseInt(arr[i])] + units[i%4] + str;
}else{
var stepIndex = Math.floor(i/4);
stepIndex = stepIndex > 2 ? (stepIndex - 2) : stepIndex;
str = numChineses[parseInt(arr[i])] + steps[stepIndex] + str;
}
}
return str;
}
var ouput = document.getElementById('output');
document.getElementById('input').onchange = function(){
var val = this.value.replace(/^0+|\D+/g, '');
this.value = val;
ouput.innerHTML = toRMB(val);
}
</script>
</body>
</html>