还有一点bug,不过大部分还是可以的了
<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.split(".")[0].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);
if(!IsZero(part[i]))
strRtn+=arr1[plen-1-i];
}
else strRtn+=ReadFour(part[i],1)+arr1[plen-1-i];
}
if(!Float || IsZero(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];
//alert(strRtn);
}
else{
if(iFlag!=0 && strRtn.charAt(strRtn.length-1)!="零" && IsZero(num.substring(len-i,len)))
 strRtn+="零";
}
}
return strRtn;
}
function IsZero(str){
return (parseInt(str,10)==0?true: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="100000000000" 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>

解决方案 »

  1.   


    货币大写转换函数的更新<%
    dim a '要转换成大写的金额
    dim atoc '转换之后的值
    Dim String1 '如下定义
    Dim String2 '如下定义
    Dim String3 '从原A值中取出的值
    Dim I '循环变量
    Dim J 'A的值乘以100的字符串长度
    Dim Ch1 '数字的汉语读法
    Dim Ch2 '数字位的汉字读法
    Dim nZero '用来计算连续的零值是几个String1 = "零壹贰叁肆伍陆柒捌玖"
    String2 = "万仟佰拾亿仟佰拾万仟佰拾元角分"
    nZero = 0If InStr(1, CStr(a * 100), ".") <> 0 Then
    err.Raise 5000, , "此函数( AtoC() )只能转换小数点后有两位以内的数!"
    End IfJ = Len(CStr(a * 100))
    String2 = Right(String2, J) '取出对应位数的STRING2的值For I = 1 To J
    String3 = Mid(a * 100, I, 1) '取出需转换的某一位的值If I <> (J - 3) + 1 And I <> (J - 7) + 1 And I <> (J - 11) + 1 And I <>(J - 15) + 1 Then
    If String3 = 0 Then
    Ch1 = ""
    Ch2 = ""
    nZero = nZero + 1
    ElseIf String3 <> 0 And nZero <> 0 Then
    Ch1 = "零" & Mid(String1, clng(String3) + 1, 1)
    Ch2 = Mid(String2, I, 1)
    nZero = 0
    Else
    Ch1 = Mid(String1, clng(String3) + 1, 1)
    Ch2 = Mid(String2, I, 1)
    nZero = 0
    End If
    Else '该位是万亿,亿,万,元位等关键位
    If String3 <> 0 And nZero <> 0 Then
    Ch1 = "零" & Mid(String1, clng(String3) + 1, 1)
    Ch2 = Mid(String2, I, 1)
    nZero = 0
    ElseIf String3 <> 0 And nZero = 0 Then
    Ch1 = Mid(String1, clng(String3) + 1, 1)
    Ch2 = Mid(String2, I, 1)
    nZero = 0
    ElseIf String3 = 0 And nZero >= 3 Then
    Ch1 = ""
    Ch2 = ""
    nZero = nZero + 1
    Else
    Ch1 = ""
    Ch2 = Mid(String2, I, 1)
    nZero = nZero + 1
    End IfIf I = (J - 11) + 1 Or I = (J - 3) + 1 Then '如果该位是亿位或元位,则必须写上
    Ch2 = Mid(String2, I, 1)
    End IfEnd If
    AtoC = AtoC & Ch1 & Ch2If I = J And String3 = 0 Then '最后一位(分)为0时,加上“整”
    AtoC = AtoC & "整"
    End IfNext 
    if a=0 then
    atoc="零元整"
    end if
    %>
      

  2.   

    <SCRIPT LANGUAGE="JavaScript">
    <!--
    function Chinese(num)
    {
        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--)
        {
            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;
    }
    document.write(Chinese("120.36"));
    //-->
    </SCRIPT>
      

  3.   

    MARK
    ~~~ 不错。
    呵呵我也写一个。<?
    $z=array("元","拾","佰","仟","万");
    $x=array("角","分");
    $y=array("零","壹","贰","叁","肆","伍","陆","柒","捌","玖");
    $val=11243.32;
    $test="".round($val,2);
    $k=$j=strlen($test)-strlen(strstr($test,"."))-1;
    for($i=0;$i<=$k;$i++){
    $out2.=$y[$test[$i]].$z[$j--];
    }$k=strlen(strstr($test,"."))-1;
    $j=0;
    $test=strstr($test,".");
    for($i=1;$i<=$k;$i++){
    $out.=$y[$test[$i]].$x[$j++];
    }
    echo $out2;
    ?>
      

  4.   


    无意中搜到此贴,提供一个较完善的:<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));">
      

  5.   

    无意中搜到此贴,提供一个较完善的:<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));">