<SCRIPT LANGUAGE="JavaScript">
<!--
function transform(str){   //数字必须在12位整数以内的字符串
   //var str  =document.all.num.value;
   var cstr = new Array("零","壹","贰","叁","肆", "伍", "陆","柒","捌","玖");
   var wstr = new Array("","","拾","佰","仟","萬","拾","佰","仟","亿","拾","佰","仟");
   var len=str.length;
   var i;   var tmpstr,rstr;
   rstr="";
   for(i=1;i<=len;i++)
   {
   tmpstr=str.substr(len-i,1);   
   rstr=(cstr[parseInt(tmpstr)]+wstr[i]).concat(rstr);
   }
         
   rstr=rstr.replace(/拾零/g,"拾");
   rstr=rstr.replace(/零拾/g,"零");
   rstr=rstr.replace(/零佰/g,"零");
   rstr=rstr.replace(/零仟/g,"零");
   rstr=rstr.replace(/零萬/g,"萬");   for(i=1;i<=6;i++)
   rstr=rstr.replace(/零零/g,"零");
   rstr=rstr.replace(/零萬/g,"萬");//error
   rstr=rstr.replace(/零亿/g,"億");
   rstr=rstr.replace(/零零/g,"零"); 
   rstr+="圆";  
   rstr=rstr.replace(/零圆/g,""); 
   return rstr;
  }alert(transform("10000001"));
//-->
</SCRIPT>

解决方案 »

  1.   

    Number.prototype.toChinese = function()
    {
    var num = this;
        if(!/^\d*(\.\d*)?$/.test(num)){alert("Number is wrong!"); return "Number is wrong!";}    var AA = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
        var BB = new Array("","拾","佰","仟","萬","億","点","");
        
        var a = (""+ num).replace(/(^0*)/g, "").split("."), k = 0, re = "";    for(var i=a[0].length-1; i>=0; i--)
        {
            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+2) != 0 && a[0].charAt(i+1) == 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)];
        }
        return re;}
      

  2.   

    ttyp 这个函数我又升级了, 解决了其中的"零"的问题:
    function Chinese(num)  //将阿拉伯数字翻译成中文的大写数字
    {
        if(!/^\d*(\.\d*)?$/.test(num)){alert("Number is wrong!"); return false;}    var AA = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
        var BB = new Array("","拾","佰","仟","萬","億","点","");
        
        var a = (""+ num).replace(/(^0*)/g, "").split("."), k = 0, re = "";    for(var i=a[0].length-1; i>=0; i--)
        {
            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)];
        }
        return re;
    }
    document.write(Chinese("2345678.6792"));
      

  3.   

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    Number.prototype.toChinese = function()
    {
    var num = Math.abs(this);
    var _prefix = ""; if(num==0)
    {
    return "零";
    }
    else if(this<0)
    {
    _prefix = "负";
    }    var AA = new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
        var BB = new Array("","拾","佰","仟","萬","億","点","");
        
        var a = (""+ num).replace(/(^0*)/g, "").split("."), k = 0, re = "";    for(var i=a[0].length-1; i>=0; i--)
        {
            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+2) != 0 && a[0].charAt(i+1) == 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)];
        }
        return _prefix + re;}
    var a = -1;
    alert(a.toChinese());//-->
    </SCRIPT>
      

  4.   

    你们试一下1010 吧EXCEL返回的是                       : 壹仟零壹拾四楼 meizz(梅花雪) 的程序返回       :  壹仟壹拾ttyp(愿赌服输) 上边最后一个程序返回 :  壹仟壹拾
      

  5.   

    这是我自己根据本论坛上一个程序改写的代码,大家帮测测
    <html>
    <head>
    <script language="javascript">
    function toChinese(num){
    var arr1=new Array("元","万","亿");
    num=num.toString();
    var strRtn="";
    if(num.charAt(0)=="-"){
    strRtn+="(<b>负</b>)";
    num=num.substring(1,num.length);
    }
    if(num.length>12){ alert("数值超过千亿,无法识别!"); return "数值超过千亿,无法识别!";}
    var ss=num.split(".");
    var Integer=ss[0];
    var Float=ss[1];
    var part=splitFour(Integer);
    var plen=part.length;
    for(var i=0;i<plen;i++){
    if(i==0 && plen > 1) strRtn+=ReadFour(part[i],0)+arr1[plen-1-i];
    else strRtn+=ReadFour(part[i],1)+arr1[plen-1-i];
    }
    if(!Float || !checkZero(Float)) {
    strRtn+="整"
    }else{
    strRtn+=AfterPoint(Float);
    }
    return strRtn;
    }function AfterPoint(num){
    var arr1=new Array("角","分");
    var arr2=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
    var str="";
    for(var i=0;i<num.length;i++){
    if(num.charAt(i)!="0")
    str+=arr2[num.charAt(i)]+arr1[i];
    else{
    if(i!=num.length-1) str+="零";
    }
    }
    return str;
    }
    function splitFour(num){
    var len=num.length;
    var count=Math.ceil(len/4);
    var arr=new Array("");
    for(var i=0;i<count;i++){
    arr[count-i-1]=num.substring(len-4,len);
    len-=4;
    }
    return arr;
    }function ReadFour(num,iFlag){
    var arr1=new Array("","拾","佰","仟");
    var arr2=new Array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
    num=num.toString();
    var strRtn="";
    len=num.length
    for(var i=len-1;i>=0;i--){
    if(num.charAt(len-i-1)!="0")
    strRtn+=arr2[num.charAt(len-i-1)]+arr1[i];
    else{
    if(iFlag!=0 && strRtn.charAt(strRtn.length-1)!="零" && checkZero(num.substring(len-i,len)))
     strRtn+="零";
    }
    }
    return strRtn;
    }
    function checkZero(str){
    for(var i=0;i<str.length;i++)
    if(str.charAt(i)!="0") return true;
    return false;
    }
    function format(num){
    var tmpVar=Math.round(parseFloat(num,10)*100)/100;
    var arr=tmpVar.toString().split(".");
    if(arr[1]){
    return tmpVar+(arr[1].length==1?"0":"");
    }else
    return tmpVar+".00";
    }
    function keyPressFlt(src){
    var e=window.event;
    code=e.keyCode;
    if(code >=48 && code <=57) return true;
    else if(code == 46 && src.value.indexOf('.')==-1) return true;
    else{  window.event.keyCode=null; return false; }
    }
    </script>
    </head>
    <body>
    <input id="txtNum" name="txtNum" width="140" value="1000000.00" onkeypress="keyPressFlt(this)">&nbsp;
    <input type="button" onclick="javascript:txtRmb.value=toChinese(txtNum.value)" value="转换">
    <p><input type="text" id="txtRmb" name="txtRmb" style="width:100%"></p>
    </body>
    </html>
      

  6.   

    zhaoxiaoyang(梅雪香@hisoft) 的代码比较完善,我暂时还没测出什么问题啊....
      

  7.   

    再发一个算法:<script language="javascript">
    num=prompt("请输入数字","");
    while (num!=null){
    num2=num;
    if(isNaN(num) || num=="" || num=="0"){
      if(num=="" || num=="0"){
        alert(num);
      }else{
        alert("输入的非数字!请重新输入");
      }
    }else{
    num_str="";
    if(num.indexOf('.')!=-1){
      num=num.substring(0,num.indexOf('.'));
    }
    c_num1=new Array('零','壹','贰','叁','肆','伍','陆','柒','捌','玖')
    c_num2=new Array('','拾','佰','仟','')
    c_num3=new Array('元','角','分')
    x=0;
    y=0;
    while (num.charAt(0)=='0'){
      num=num.substring(1,num.length)  //去掉给定的数前面的零
    }
    for (i=0;i<num.length;i++){
        if(x==4 && y!=8){
      if(num.charAt(num.length-i-1)!='0'){
            num_str=c_num1[parseInt(num.charAt(num.length-i-1))]+'万'+num_str
      }else{
       num_str='万'+num_str
      }
      x=0;
        }else if(y==8){
      if(num.charAt(num.length-i-1)!='0'){
          num_str=c_num1[parseInt(num.charAt(num.length-i-1))]+'亿'+num_str
      }else{
       num_str='亿'+num_str 
      }
       x=0;
       y=0;
        }else if(i>0){
      if(num.charAt(num.length-i-1)!='0'){
          num_str=c_num1[parseInt(num.charAt(num.length-i-1))]+c_num2[x]+num_str
      }else{
        if(num_str.charAt(0)!='零'){
         num_str=c_num1[parseInt(num.charAt(num.length-i-1))]+num_str
        }
      }
        }else{
      if(num.charAt(num.length-i-1)!='0'){
          num_str=c_num1[parseInt(num.charAt(num.length-i-1))]+num_str
      }
        }
       x++;
       y++;
    }
    if (num_str.charAt(num_str.length-1)=='零'){
      num_str=num_str.substring(0,num_str.length-1);
    }
    //特殊处理
    num_str=num_str.replace(/零万/g,"万");
    num_str=num_str.replace(/零亿/g,"亿");
    num_str=num_str.replace(/亿万/g,"亿");
    num_str=num_str+c_num3[0];
    dplace=num2.indexOf('.')
    if(dplace!=-1){
      if(dplace==num2.length-1){
        num_str=num_str+"整"
      }else{
        if(dplace+2==num2.length){
       num_str=num_str+c_num1[parseInt(num2.charAt(dplace+1))]
       if(num2.charAt(dplace+1)!='0'){
         num_str=num_str+c_num3[1]
       }
     }else if(dplace+3<=num2.length){
       num_str=num_str+c_num1[parseInt(num2.charAt(dplace+1))]
       if(num2.charAt(dplace+1)!='0'){
         num_str=num_str+c_num3[1]
       }
       if(num2.charAt(dplace+2)!='0'){
         num_str=num_str+c_num1[parseInt(num2.charAt(dplace+2))]+c_num3[2]
       }
     }
      }
    }else{
      num_str=num_str+"整"
    }
    alert(num2+"\r"+num_str)
    }
    num=prompt("请输入数字",num2);
    }
    </script>
      

  8.   


    无意中搜到此贴,提供一个较完善的:<script>
      function toRMB(str){
        var str1="",str2="",str3="",str4="",j=0,z=0,Finddot=false;
        //检查输入的合法性
        if(str.length<1){alert("请输入至少一个数字");return "";}
        for(j=0;j<str.length;j++){
          if(0+str1==0)str1="";
          if(str.charCodeAt(j)>47&&str.charCodeAt(j)<58){
            str1+=str.charAt(j);
          }else if(str.charCodeAt(j)==46&&Finddot==false){
            Finddot=true;
            str1+=str.charAt(j);
          }else{
            if(confirm("你输入的数字含有非法的字符,你还要继续转换吗?")==false)return "";
          }
         }
        if(Finddot==false)str1+=".00";
        if(str.length>16){alert("数值太大,无法正确转换");return "";}
        //检查结束    //开始转换
        str2="零壹贰叁肆伍陆柒捌玖";
        str3="分角 元拾佰仟万拾佰仟亿拾佰仟万";
        for(j=str1.length-1;j>=0;j--){
          if(str1.charAt(str1.length-1-j)=="0"){
            if(str3.charAt(j)=="万"||str3.charAt(j)=="亿"){str4+=str3.charAt(j);z=0;}else{z++;}
          }else if(z>0&&str1.charAt(str1.length-1-j)!="."){
            str4+="零"+str2.charAt(str1.charAt(str1.length-1-j))+str3.charAt(j);
            z=0;
          }else if(str1.charAt(str1.length-1-j)!="."){
            str4+=str2.charAt(str1.charAt(str1.length-1-j))+str3.charAt(j);
          }
        }
        if(str4.substring(str4.length-1)=="元")str4+="正";
        else if(str4.substring(str4.length-1)!="角"&&str4.substring(str4.length-1)!="分")str4+="元正";
        return str4;
        //转换结束
      }
    </script>
    <input name=orgnum type=text>
    <input type="button" value="转换" onClick="alert(toRMB(orgnum.value));">
      

  9.   

    上面那个无意中删除了一个字符,重发如下:<script>
      function toRMB(str){
        var str1="",str2="",str3="",str4="",j=0,z=0,Finddot=false;
        //检查输入的合法性
        if(str.length<1){alert("请输入至少一个数字");return "";}
        for(j=0;j<str.length;j++){
          if(0+str1==0)str1="";
          if(str.charCodeAt(j)>47&&str.charCodeAt(j)<58){
            str1+=str.charAt(j);
          }else if(str.charCodeAt(j)==46&&Finddot==false){
            Finddot=true;
            str1+=str.charAt(j);
          }else{
            if(confirm("你输入的数字含有非法的字符,你还要继续转换吗?")==false)return "";
          }
         }
        if(Finddot==false)str1+=".00";
        if(str1.length>16){alert("数值太大,无法正确转换");return "";}
        //检查结束    //开始转换
        str2="零壹贰叁肆伍陆柒捌玖";
        str3="分角 元拾佰仟万拾佰仟亿拾佰仟万";
        for(j=str1.length-1;j>=0;j--){
          if(str1.charAt(str1.length-1-j)=="0"){
            if(str3.charAt(j)=="万"||str3.charAt(j)=="亿"){str4+=str3.charAt(j);z=0;}else{z++;}
          }else if(z>0&&str1.charAt(str1.length-1-j)!="."){
            str4+="零"+str2.charAt(str1.charAt(str1.length-1-j))+str3.charAt(j);
            z=0;
          }else if(str1.charAt(str1.length-1-j)!="."){
            str4+=str2.charAt(str1.charAt(str1.length-1-j))+str3.charAt(j);
          }
        }
        if(str4.substring(str4.length-1)=="元")str4+="正";
        else if(str4.substring(str4.length-1)!="角"&&str4.substring(str4.length-1)!="分")str4+="元正";
        return str4;
        //转换结束
      }
    </script>
    <input name=orgnum type=text>
    <input type="button" value="转换" onClick="alert(toRMB(orgnum.value));">