怎么将数字转换成中文大写,目前我下面这个代码运行出来的效果有点出入:
如:102转换后是“壹佰贰”正确应该是:壹佰零贰。
1020转换后是"壹仟贰拾".正确应该是:壹仟零贰拾
谢谢各位JS高手,帮判断一下。谢谢
<html>
<script language="javascript">
//将阿拉伯数字翻译成中文的大写数字
function moneyToCapital(formName,sourceId,targetId)
{
var source=document.forms[formName].all[sourceId];
var target=document.forms[formName].all[targetId];
var num=source.value;
if(!/^\d*(\.\d*)?$/.test(num)) throw(new Error(-1, "Number is wrong!")); var AA = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var BB = new Array("","拾","佰","仟","?","?","圆","");
var CC = new Array("角", "分", "厘");
var a = (""+ num).replace(/(^0*)/g, "").split("."), k = 0, re = ""; for(var i=a[0].length-1; i>=0; i--) //author: meizz
{
switch(k)
{
case 0 : re = BB[7] + re; break;
case 4 : if(!new RegExp("0{4}\\d{"+ (a[0].length-i-1) +"}$").test(a[0]))
re = BB[4] + re; break;
case 8 : re = BB[5] + re; BB[7] = BB[5]; k = 0; break;
}
if(k%4 == 2 && a[0].charAt(i)=="0" && a[0].charAt(i+2) != "0") re = AA[0] + re;
if(a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k%4] + re; k++;
} if(a.length>1) //加上小数部分(如果有小数部分)
{
re += BB[6];
for(var i=0; i<a[1].length; i++)
{
re += AA[a[1].charAt(i)] + CC[i];
if(i==2) break;
}
}
// return re;
target.value= re ;
}</script>
<form name="form1" action="" method="post">
<input type="text" name="a" id="a" onblur="moneyToCapital('form1','a','b')" onkeyup="moneyToCapital('form1','a','b')">
<input type="text" name="b" id="b" value="">
</form>
</html>
如:102转换后是“壹佰贰”正确应该是:壹佰零贰。
1020转换后是"壹仟贰拾".正确应该是:壹仟零贰拾
谢谢各位JS高手,帮判断一下。谢谢
<html>
<script language="javascript">
//将阿拉伯数字翻译成中文的大写数字
function moneyToCapital(formName,sourceId,targetId)
{
var source=document.forms[formName].all[sourceId];
var target=document.forms[formName].all[targetId];
var num=source.value;
if(!/^\d*(\.\d*)?$/.test(num)) throw(new Error(-1, "Number is wrong!")); var AA = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
var BB = new Array("","拾","佰","仟","?","?","圆","");
var CC = new Array("角", "分", "厘");
var a = (""+ num).replace(/(^0*)/g, "").split("."), k = 0, re = ""; for(var i=a[0].length-1; i>=0; i--) //author: meizz
{
switch(k)
{
case 0 : re = BB[7] + re; break;
case 4 : if(!new RegExp("0{4}\\d{"+ (a[0].length-i-1) +"}$").test(a[0]))
re = BB[4] + re; break;
case 8 : re = BB[5] + re; BB[7] = BB[5]; k = 0; break;
}
if(k%4 == 2 && a[0].charAt(i)=="0" && a[0].charAt(i+2) != "0") re = AA[0] + re;
if(a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k%4] + re; k++;
} if(a.length>1) //加上小数部分(如果有小数部分)
{
re += BB[6];
for(var i=0; i<a[1].length; i++)
{
re += AA[a[1].charAt(i)] + CC[i];
if(i==2) break;
}
}
// return re;
target.value= re ;
}</script>
<form name="form1" action="" method="post">
<input type="text" name="a" id="a" onblur="moneyToCapital('form1','a','b')" onkeyup="moneyToCapital('form1','a','b')">
<input type="text" name="b" id="b" value="">
</form>
</html>
解决方案 »
- jqPlot 的设置问题。比较急。在线等。
- 数组对象按属性值排序
- js怎样快速把数组里面除了第一个孩子其他的全删除?
- LigerUI分页怎么获取pageParmName(页索引参数名)、pagesizeParmName(页记录数参数名) 在线等!
- 弹出设首页代码,设为首页后不提示
- 大家推荐一本不错的javascript教程吧
- 禁止保存网页????、
- 字符串的问题
- 请问哪里有用javascript写的Excel..?
- 那位高手解釋一下 event.behaviorCookie & event.behaviorPart , 最好是中文解釋 , 謝了
- 求高手出招:找不到js中定义的方法
- 关于手机正则表达式问题
{
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><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>
<input onBlur="this.value=chin(this.value)" type="text">
</body>
<script language="javascript">
function chin(str){
var cnChar = "零壹贰叁肆伍陆柒捌玖",
partInt = '元拾佰仟万拾佰仟亿拾佰仟',
len = str.length-1,
arr = new Array((len+1)),
i=0;
str.replace(/\d/g,function(n){
var b = partInt.charAt(len-i);
arr[i] = cnChar.charAt(n) + (n==='0'&&'元万亿'.indexOf(b)<0?'':b);
i++;
});
return arr.join('').replace(/(零)\1+/g,'零').replace(/(零)(?=元|万|亿)/g,'');
}
</script>