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

