將金錢數額轉換為大寫

antzone發表於2018-06-29

金錢的大寫形式還是非常有必要的,因為可以有效的避免被篡改。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼執行程式碼
function transform(tranvalue) {
  try {
    var i = 1;
    var dw2 = new Array("", "萬", "億"); //大單位
    var dw1 = new Array("拾", "佰", "仟"); //小單位
    var dw = new Array("零", "壹", "貳", "叄", "肆", "伍", "陸", "柒", "捌", "玖"); //整數部分用
    //以下是小寫轉換成大寫顯示在合計大寫的文字框中
    //分離整數與小數
    var source = splits(tranvalue);
    var num = source[0];
    var dig = source[1];
    //轉換整數部分
    var k1 = 0; //計小單位
    var k2 = 0; //計大單位
    var sum = 0;
    var str = "";
    var len = source[0].length; //整數的長度
    for (i = 1; i <= len; i++) {
      var n = source[0].charAt(len - i); //取得某個位數上的數字
      var bn = 0;
      if (len - i - 1 >= 0) {
        bn = source[0].charAt(len - i - 1); //取得某個位數前一位上的數字
      }
      sum = sum + Number(n);
      if (sum != 0) {
        str = dw[Number(n)].concat(str); //取得該數字對應的大寫數字,並插入到str字串的前面
        if (n == '0') sum = 0;
      }
      if (len - i - 1 >= 0) { //在數字範圍內
        if (k1 != 3) { //加小單位
          if (bn != 0) {
            str = dw1[k1].concat(str);
          }
          k1++;
        } else { //不加小單位,加大單位
          k1 = 0;
          var temp = str.charAt(0);
          if (temp == "萬" || temp == "億") //若大單位前沒有數字則捨去大單位
          str = str.substr(1, str.length - 1);
          str = dw2[k2].concat(str);
          sum = 0;
        }
      }
      if (k1 == 3) //小單位到千則大單位進一
      {
        k2++;
      }
    }
    //轉換小數部分
    var strdig = "";
    if (dig != "") {
      var n = dig.charAt(0);
      if (n != 0) {
        strdig += dw[Number(n)] + "角"; //加數字
      }
      var n = dig.charAt(1);
      if (n != 0) {
        strdig += dw[Number(n)] + "分"; //加數字
      }
    }
    str += "元" + strdig;
  } catch(e) {
    return "0元";
  }
  return str;
}
//拆分整數與小數
function splits(tranvalue) {
  var value = new Array('', '');
  temp = tranvalue.split(".");
  for (var i = 0; i < temp.length; i++) {
    value[i] = temp[i];
  }
  return value;
}
console.log(transform("120.5"));

相關文章