js實(shí)現(xiàn)完美兼容各大瀏覽器的人民幣大小寫(xiě)相互轉(zhuǎn)換
/*小寫(xiě)轉(zhuǎn)大寫(xiě)*/
var xcc= "12.22"; document.write(xcc+"=>"+formatRMB(xcc)+"<br/>");
/*大寫(xiě)轉(zhuǎn)小寫(xiě)*/
var rrrr = "壹拾貳元貳角貳分"; document.write(rrrr+"=>"+parseRMB(rrrr));
輸出結(jié)果:
12.22=>壹拾貳元貳角貳分
壹拾貳元貳角貳分=>12.22
我們來(lái)看下具體實(shí)例
var c = "零壹貳叁肆伍陸柒捌玖".split(""); // ["零","壹","貳","叁","肆","伍","陸","柒","捌","玖"] var _c = {}; // 反向?qū)?yīng)關(guān)系 for ( var i = 0; i < c.length; i++) { _c[c[i]] = i; }; var d = "元***萬(wàn)***億***萬(wàn)"; var e = ",拾,佰,仟".split(","); function unit4(arr) { var str = "", i = 0; while (arr.length) { var t = 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); } return str; } function _formatD(a) { // 轉(zhuǎn)化整數(shù)部分 var arr = a.split(""), i = 0, result = ""; while (arr.length) { var arr1 = arr.splice(-4, 4); var dw = d.charAt(i), unit = unit4(arr1); if (dw == '萬(wàn)' && !unit) { dw = ""; } result = unit + dw + result; i += 4; } return result == "元" ? "" : result; } function _formatF(b){ // 轉(zhuǎn)化小數(shù)部分 b = b || ""; switch (b.length) { case 0: return "整"; case 1: return c[b] + "角"; default: return c[b.charAt(0)] + "角" + c[b.charAt(1)] + "分"; } } function _format(n){ var a = ("" + n).split("."), a0 = a[0], a1 = a[1]; return _formatD(a0) + _formatF(a1); } function parse4(u4){ var res = 0; while (t = /([零壹貳叁肆伍陸柒捌玖])([拾佰仟]?)/g.exec(u4)) { var n = _c[t[1]], d = { "" : 1, "拾" : 10, "佰" : 100, "仟" : 1000 }[t[2]]; res += n * d; u4 = u4.replace(t[0], ""); } var result = ("0000" + res); return result.substring(result.length - 4); } function _parseD(d) { var arr = d.replace(/[零]/g, "").split(/[萬(wàn)億]/), rs = ""; for ( var i = 0; i < arr.length; i++) { rs += parse4(arr[i]); } ; return rs.replace(/^[0]+/, ""); }; function _parseF(f) { var res = "", t = f.replace(/[^零壹貳叁肆伍陸柒捌玖]+/g, "").split(""); // 去掉單位 if (t.length) { res = "."; } else { return ""; } ; for ( var i = 0; (i < t.length && i < 2); i++) { res += _c[t[i]]; } ; return res; }; function _parse(rmb) { var a = rmb.split("元"), a1 = a[1], a0 = a[0]; if (a.length == 1) { a1 = a0; a0 = ""; } return _parseD(a0) + _parseF(a1); }; //小寫(xiě)轉(zhuǎn)大寫(xiě) function formatRMB(num){ var n = Number(num); if(!isNaN(num)){ if(num == 0){ return "零元整"; }else{ return _format(n); } }else { return false; } } //大寫(xiě)轉(zhuǎn)小寫(xiě) function parseRMB(rmb) { if (/^[零壹貳叁肆伍陸柒捌玖元萬(wàn)億拾佰仟角分整]{2,}$/.test(rmb)) { var result = _parse(rmb); return rmb == this.formatRMB(result) ? result : result + "(?)"; } else { return false; } }; /*小寫(xiě)轉(zhuǎn)大寫(xiě)*/ var xcc= "12.22"; document.write(xcc+"=>"+formatRMB(xcc)+"<br/>"); /*大寫(xiě)轉(zhuǎn)小寫(xiě)*/ var rrrr = "壹拾貳元貳角貳分"; document.write(rrrr+"=>"+parseRMB(rrrr));
再來(lái)看一個(gè)將RMB轉(zhuǎn)化為大寫(xiě)的例子
//人民幣金額轉(zhuǎn)大寫(xiě)程序 JavaScript版 //CopyRight Bardo QI function numToCny(num){ var capUnit = ['萬(wàn)','億','萬(wàn)','圓','']; var capDigit = { 2:['角','分',''], 4:['仟','佰','拾','']}; var capNum=['零','壹','貳','叁','肆','伍','陸','柒','捌','玖']; 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; var i,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; return ret; }
相關(guān)文章
微信小程序 JS動(dòng)態(tài)修改樣式的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于微信小程序JS動(dòng)態(tài)修改樣式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-12-12javascript寫(xiě)的異步加載js文件函數(shù)(支持?jǐn)?shù)組傳參)
這篇文章主要介紹了javascript寫(xiě)的異步加載js文件函數(shù),同時(shí)支持單個(gè)文件和多個(gè)文件(數(shù)組傳參),但不兼容IE6,需要的朋友可以參考下2014-06-06vue3+Pinia+TypeScript?實(shí)現(xiàn)封裝輪播圖組件
這篇文章主要介紹了vue3+Pinia+TypeScript?實(shí)現(xiàn)封裝輪播圖組件,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-07-07關(guān)于onchange事件在IE和FF下的表現(xiàn)及解決方法
本篇文章主要是對(duì)關(guān)于onchange事件在IE和FF下的表現(xiàn)及解決方法進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-03-03JS獲取iframe中marginHeight和marginWidth屬性的方法
這篇文章主要介紹了JS獲取iframe中marginHeight和marginWidth屬性的方法,涉及javascript操作iframe屬性的技巧,并分析了marginHeight和marginWidth屬性的功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04使用Promise鏈?zhǔn)秸{(diào)用解決多個(gè)異步回調(diào)的問(wèn)題
這篇文章主要給大家介紹了使用Promise鏈?zhǔn)秸{(diào)用解決多個(gè)異步回調(diào)問(wèn)題的方法,文中給出了詳細(xì)的介紹和示例代碼,有需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-01-01