怎么将数字转换成中文大写,目前我下面这个代码运行出来的效果有点出入:
如: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> 

解决方案 »

  1.   

       <script>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><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> 
      

  2.   

    <body>
    <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>