1. 程式人生 > 實用技巧 >金額轉換文章(100=>零佰)

金額轉換文章(100=>零佰)

 1 export function convertCurrency(money) {
 2   //漢字的數字
 3   let cnNums = new Array('零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖');
 4   //基本單位
 5   let cnIntRadice = new Array('', '拾', '佰', '仟');
 6   //對應整數部分擴充套件單位
 7   let cnIntUnits = new Array('', '萬', '億', '兆');
 8   //對應小數部分單位
 9   let cnDecUnits = new
Array('角', '分', '毫', '釐'); 10 //整數金額時後面跟的字元 11 let cnInteger = '整'; 12 //整型完以後的單位 13 let cnIntLast = '元'; 14 //最大處理的數字 15 let maxNum = 999999999999999.9999; 16 //金額整數部分 17 let integerNum; 18 //金額小數部分 19 let decimalNum; 20 //輸出的中文金額字串 21 let chineseStr = ''; 22 //分離金額後用的陣列,預定義 23 let parts;
24 25 if (money == '') { 26 return ''; 27 } 28 money = parseFloat(money); 29 if (money >= maxNum) { 30 //超出最大處理數字 31 return ''; 32 } 33 if (money == 0) { 34 chineseStr = cnNums[0] + cnIntLast + cnInteger; 35 return chineseStr; 36 } 37 //轉換為字串 38 money = money.toString();
39 if (money.indexOf('.') == -1) { 40 integerNum = money; 41 decimalNum = ''; 42 } else { 43 parts = money.split('.'); 44 integerNum = parts[0]; 45 decimalNum = parts[1].substr(0, 4); 46 } 47 //獲取整型部分轉換 48 if (parseInt(integerNum, 10) > 0) { 49 var zeroCount = 0; 50 var IntLen = integerNum.length; 51 for (var i = 0; i < IntLen; i++) { 52 var n = integerNum.substr(i, 1); 53 var p = IntLen - i - 1; 54 var q = p / 4; 55 var m = p % 4; 56 if (n == '0') { 57 zeroCount++; 58 } else { 59 if (zeroCount > 0) { 60 chineseStr += cnNums[0]; 61 } 62 //歸零 63 zeroCount = 0; 64 chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; 65 } 66 if (m == 0 && zeroCount < 4) { 67 chineseStr += cnIntUnits[q]; 68 } 69 } 70 chineseStr += cnIntLast; 71 } 72 //小數部分 73 if (decimalNum != '') { 74 var decLen = decimalNum.length; 75 for (var i = 0; i < decLen; i++) { 76 var n = decimalNum.substr(i, 1); 77 if (n != '0') { 78 chineseStr += cnNums[Number(n)] + cnDecUnits[i]; 79 } 80 } 81 } 82 if (chineseStr == '') { 83 chineseStr += cnNums[0] + cnIntLast + cnInteger; 84 } else if (decimalNum == '') { 85 chineseStr += cnInteger; 86 } 87 return chineseStr; 88 }