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;
}