js實現數字金額轉換爲對應的大寫金額(精確到小數點後兩位,支持負數金額的轉換)

####數字金額轉換爲對應的大寫金額代碼實現如下:

export function convertMoney(money) {
    //漢字的數字
    var cnNums = new Array('零', '壹', '貳', '叄', '肆', '伍', '陸', '柒', '捌', '玖');
    //基本單位
    var cnIntRadice = new Array('', '拾', '佰', '仟');
    //對應整數部分擴展單位
    var cnIntUnits = new Array('', '萬', '億', '兆');
    //對應小數部分單位
    var cnDecUnits = new Array('角', '分');
    //整數金額時後面跟的字符
    var cnInteger = '整';
    //整型完以後的單位
    var cnIntLast = '元';
    // 如果爲負數
    var cnIntMinus = '負';
    // 負號處理後的數字
    var cash;
    //分離金額後用的數組,預定義
    var parts;
    //金額整數部分
    var integerNum;
    //金額小數部分
    var decimalNum;
    //輸出的中文金額字符串
    var chineseStr = '';

    // 判斷空
    if (money == "") {
      return "";
    }
    // 判斷正負
    if(money.charAt(0) === "-"){
        // chineseStr += cnIntMinus;
        cash = money.slice(1);
    }else{
        cash = money;   
    }
    // 轉換爲浮點數類型,會自動去掉首尾的0
    cash = parseFloat(cash);
    if (cash == 0) {
      chineseStr = cnNums[0] + cnIntLast + cnInteger;
      return chineseStr;
    }

    // 轉換爲字符串
    cash = cash.toString();
    if (cash.indexOf('.') == -1) {
        integerNum = cash;              //金額整數部分
        decimalNum = '';                //金額小數部分
    } else {
        parts = cash.split(".");
        integerNum = parts[0];                      //金額整數部分
        decimalNum = parts[1].substr(0, 2);         //金額小數部分
    }

    // 轉換整數部分
    if (integerNum != '-' && parseInt(integerNum, 10) > 0) {
      var intLen = integerNum.length;
      var zero = 0; //標記零出現次數
      for (let i = 0; i < intLen; i++) {
        var intChar = integerNum.substr(i, 1);
        var intSlen = intLen - i - 1;
        var divided = intSlen / 4;
        var remain = intSlen % 4;

        if (intChar == "0") {
          zero++;
        } else {
          if (zero > 0) {
            chineseStr += cnNums[0];
          }
          zero = 0;
          chineseStr += cnNums[parseInt(intChar)] + cnIntRadice[remain];
        }
        if (remain === 0 && divided > 0) {
          chineseStr += cnIntUnits[divided];
        }
      }
      chineseStr += cnIntLast; //加上'元'字
    }

    if (decimalNum != ''){      // 小數部分存在時
        var decLen = decimalNum.length;
        for(let i=0; i<decLen; i++){
            var decChar = decimalNum.substr(i,1);
            if(decChar != '0'){
                chineseStr += cnNums[parseInt(decChar)] + cnDecUnits[i];
            }
            if (decChar == '0' && parseInt(integerNum, 10) > 0){
                chineseStr += cnNums[parseInt(decChar)] + cnDecUnits[i];
            }
        }
    }else{
        chineseStr += cnInteger;
    }
    return chineseStr;
}

####效果圖如下:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章