1. 程式人生 > >js 阿拉伯數字轉中文大寫貨幣

js 阿拉伯數字轉中文大寫貨幣

//方式一 
	function zh(n) {
        if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n))
            return "資料非法";
        var unit = "仟佰拾億仟佰拾萬仟佰拾圓角分", str = "";
            n += "00";
        var p = n.indexOf('.');
        if (p >= 0)
            n = n.substring(0, p) + n.substr(p+1, 2);
            unit = unit.substr(unit.length - n.length);
        for (var i=0; i < n.length; i++)
            str += '零壹貳叄肆伍陸柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
        return str.replace(/零(仟|佰|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(萬|億|圓)/g, "$1").replace(/(億)萬|壹(拾)/g, "$1$2").replace(/^圓零?|零分/g, "").replace(/圓$/g, "圓整");
	}
	
	//方式二
	function zh(money) {
		
		if(money.indexOf('-1') != -1 ){
			money = money.substring(1);
		}
	  //漢字的數字
	  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;
	}