適用場景:票據,結算憑證等。
將任意數字的金額,轉換成漢字大寫的形式。
例如:1234.50 -> 壹仟貳佰叄拾肆圓伍角。
壹、貳、叄、肆
直接貼代碼,如下:
//阿拉伯數字轉換成大寫漢字 function numberParseChina(money){ //漢字的數字 var cnNums = new Array('零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖'); //基本單位 var cnIntRadice = new Array('', '拾', '佰', '仟'); //對應整數部分擴展單位 var cnIntUnits = new Array('', '萬', '億', '兆'); //對應小數部分單位 var cnDecUnits = new Array('角', '分', '毫', '厘'); //整數金額時后面跟的字符 var cnInteger = '整'; //整型完以后的單位 var cnIntLast = '圓'; //最大處理的數字 var maxNum = 999999999999999.9999; //金額整數部分 var integerNum; //金額小數部分 var decimalNum; //輸出的中文金額字符串 var chineseStr = ''; //分離金額后用的數組,預定義 var parts; if (money == '') { return ''; } money = parseFloat(money); if (money >= maxNum) { //超出最大處理數字 return ''; } if (money == 0) { chineseStr = cnNums[0] + cnIntLast + cnInteger; return chineseStr; } //轉換為字符串 money = money.toString(); if (money.indexOf('.') == -1) { integerNum = money; decimalNum = ''; } else { parts = money.split('.'); integerNum = parts[0]; decimalNum = parts[1].substr(0, 4); } //獲取整型部分轉換 if (parseInt(integerNum, 10) > 0) { var zeroCount = 0; var IntLen = integerNum.length; for (var i = 0; i < IntLen; i++) { var n = integerNum.substr(i, 1); var p = IntLen - i - 1; var q = p / 4; var m = p % 4; if (n == '0') { zeroCount++; } else { if (zeroCount > 0) { chineseStr += cnNums[0]; } //歸零 zeroCount = 0; chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; } if (m == 0 && zeroCount < 4) { chineseStr += cnIntUnits[q]; } } chineseStr += cnIntLast; } //小數部分 if (decimalNum != '') { var decLen = decimalNum.length; for (var i = 0; i < decLen; i++) { var n = decimalNum.substr(i, 1); if (n != '0') { chineseStr += cnNums[Number(n)] + cnDecUnits[i]; } } } if (chineseStr == '') { chineseStr += cnNums[0] + cnIntLast + cnInteger; } else if (decimalNum == '') { chineseStr += cnInteger; } return chineseStr; }
在小程序中使用,要將上面的代碼略改,小程序不支持字符串方法substr()方法,但支持substring()方法
(排查了的心態快炸了!)Σ( ° △ °|||)︴,還有個地方Number()方法也報錯,改成parseInt()就好了。具體看代碼,我把這代碼放到了微信的wxs文件里了。
tools.wxs文件

var numberParseChina = function (money){ console.log(money, '執行了嗎'); //漢字的數字 var cnNums = ['零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖']; //基本單位 var cnIntRadice =['', '拾', '佰', '仟']; //對應整數部分擴展單位 var cnIntUnits = ['', '萬', '億', '兆']; //對應小數部分單位 var cnDecUnits = ['角', '分', '毫', '厘']; //整數金額時后面跟的字符 var cnInteger = '整'; //整型完以后的單位 // var cnIntLast = '圓'; var cnIntLast = '元'; //最大處理的數字 var maxNum = 999999999999999.9999; //金額整數部分 var integerNum; //金額小數部分 var decimalNum; //輸出的中文金額字符串 var chineseStr = ''; //分離金額后用的數組,預定義 var parts; if (money == '') { return ''; } money = parseFloat(money); if (money >= maxNum) { //超出最大處理數字 return ''; } if (money == 0) { chineseStr = cnNums[0] + cnIntLast + cnInteger; return chineseStr; } //轉換為字符串 money = money.toString(); if (money.indexOf('.') == -1) { integerNum = money; decimalNum = ''; } else { parts = money.split('.'); integerNum = parts[0]; // decimalNum = parts[1].substr(0, 4); decimalNum = parts[1].substring(0, 4); } //獲取整型部分轉換 if (parseInt(integerNum, 10) > 0) { var zeroCount = 0; var IntLen = integerNum.length; for (var i = 0; i < IntLen; i++) { // var n = integerNum.substr(i, 1); var n = integerNum.substring(i, i+1); var p = IntLen - i - 1; var q = p / 4; var m = p % 4; if (n == '0') { zeroCount++; } else { if (zeroCount > 0) { chineseStr += cnNums[0]; } //歸零 zeroCount = 0; chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; } if (m == 0 && zeroCount < 4) { chineseStr += cnIntUnits[q]; } } chineseStr += cnIntLast; } //小數部分 if (decimalNum != '') { var decLen = decimalNum.length; for (var i = 0; i < decLen; i++) { // var n = decimalNum.substr(i, 1); var n = decimalNum.substring(i, i+1); if (n != '0') { // chineseStr += cnNums[Number(n)] + cnDecUnits[i]; chineseStr += cnNums[parseInt(n)] + cnDecUnits[i]; } } } if (chineseStr == '') { chineseStr += cnNums[0] + cnIntLast + cnInteger; } else if (decimalNum == '') { chineseStr += cnInteger; } return chineseStr; } module.exports = { numberParseChina: numberParseChina }
轉載:https://blog.csdn.net/guoyangyang123456/article/details/84525865