js实现完美兼容各大浏览器的人民币大小写相互转换
/*小写转大写*/
varxcc="12.22"; document.write(xcc+"=>"+formatRMB(xcc)+"<br/>");
/*大写转小写*/
varrrrr="壹拾贰元贰角贰分"; document.write(rrrr+"=>"+parseRMB(rrrr));
输出结果:
12.22=>壹拾贰元贰角贰分
壹拾贰元贰角贰分=>12.22
我们来看下具体实例
varc="零壹贰叁肆伍陆柒捌玖".split(""); //["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"] var_c={};//反向对应关系 for(vari=0;i<c.length;i++){ _c[c[i]]=i; }; vard="元***万***亿***万"; vare=",拾,佰,仟".split(","); functionunit4(arr){ varstr="",i=0; while(arr.length){ vart=arr.pop(); str=(c[t]+(t==0?"":e[i]))+str; i++; } str=str.replace(/[零]{2,}/g,"零"); str=str.replace(/^[零]/,""); str=str.replace(/[零]$/,""); if(str.indexOf("零")==0){ str=str.substring(1); } if(str.lastIndexOf("零")==str.length-1){ str=str.substring(0,str.length-1); } returnstr; } function_formatD(a){ //转化整数部分 vararr=a.split(""),i=0,result=""; while(arr.length){ vararr1=arr.splice(-4,4); vardw=d.charAt(i),unit=unit4(arr1); if(dw=='万'&&!unit){ dw=""; } result=unit+dw+result; i+=4; } returnresult=="元"?"":result; } function_formatF(b){ //转化小数部分 b=b||""; switch(b.length){ case0: return"整"; case1: returnc[b]+"角"; default: returnc[b.charAt(0)]+"角"+c[b.charAt(1)]+"分"; } } function_format(n){ vara=(""+n).split("."),a0=a[0],a1=a[1]; return_formatD(a0)+_formatF(a1); } functionparse4(u4){ varres=0; while(t=/([零壹贰叁肆伍陆柒捌玖])([拾佰仟]?)/g.exec(u4)){ varn=_c[t[1]],d={ "":1, "拾":10, "佰":100, "仟":1000 }[t[2]]; res+=n*d; u4=u4.replace(t[0],""); } varresult=("0000"+res); returnresult.substring(result.length-4); } function_parseD(d){ vararr=d.replace(/[零]/g,"").split(/[万亿]/),rs=""; for(vari=0;i<arr.length;i++){ rs+=parse4(arr[i]); } ; returnrs.replace(/^[0]+/,""); }; function_parseF(f){ varres="",t=f.replace(/[^零壹贰叁肆伍陆柒捌玖]+/g,"").split("");//去掉单位 if(t.length){ res="."; }else{ return""; } ; for(vari=0;(i<t.length&&i<2);i++){ res+=_c[t[i]]; } ; returnres; }; function_parse(rmb){ vara=rmb.split("元"),a1=a[1],a0=a[0]; if(a.length==1){ a1=a0; a0=""; } return_parseD(a0)+_parseF(a1); }; //小写转大写 functionformatRMB(num){ varn=Number(num); if(!isNaN(num)){ if(num==0){ return"零元整"; }else{ return_format(n); } }else{ returnfalse; } } //大写转小写 functionparseRMB(rmb){ if(/^[零壹贰叁肆伍陆柒捌玖元万亿拾佰仟角分整]{2,}$/.test(rmb)){ varresult=_parse(rmb); returnrmb==this.formatRMB(result)?result:result+"(?)"; }else{ returnfalse; } }; /*小写转大写*/ varxcc="12.22"; document.write(xcc+"=>"+formatRMB(xcc)+"<br/>"); /*大写转小写*/ varrrrr="壹拾贰元贰角贰分"; document.write(rrrr+"=>"+parseRMB(rrrr));
再来看一个将RMB转化为大写的例子
//人民币金额转大写程序JavaScript版 //CopyRightBardoQI functionnumToCny(num){ varcapUnit=['万','亿','万','圆','']; varcapDigit={2:['角','分',''],4:['仟','佰','拾','']}; varcapNum=['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']; if(((num.toString()).indexOf('.')>16)||(isNaN(num))) return''; num=(Math.round(num*100)/100).toString(); num=((Math.pow(10,19-num.length)).toString()).substring(1)+num; vari,ret,j,nodeNum,k,subret,len,subChr,CurChr=[]; for(i=0,ret='';i<5;i++,j=i*4+Math.floor(i/4)){ nodeNum=num.substring(j,j+4); for(k=0,subret='',len=nodeNum.length;((k CurChr[k%2]=capNum[nodeNum.charAt(k)]+((nodeNum.charAt(k)==0)?'':capDigit[len][k]); if(!((CurChr[0]==CurChr[1])&&(CurChr[0]==capNum[0]))) if(!((CurChr[k%2]==capNum[0])&&(subret=='')&&(ret==''))) subret+=CurChr[k%2]; } subChr=subret+((subret=='')?'':capUnit[i]); if(!((subChr==capNum[0])&&(ret==''))) ret+=subChr; } ret=(ret=='')?capNum[0]+capUnit[3]:ret; returnret; }