JS实现数字金额转大写金额(js数字转金额格式)

作者:图王章征军
围观群众:30
更新于

1 2 3 4 5 6 7 8
9 0 亿
亿

JS将

金额数字转大写

的方式封装 ,下面为人人整理些常用的实现方式。


方式一:

function digitUppercase(price) {
  const fraction = ['角', '分'];
  const digit = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
  const unit = [
    ['米', '万', '亿'],
    ['', '拾', '佰', '仟'],
  ];
  let num = Math.abs(price);
  let s = '';
  fraction.forEach((item, index) => {
    s += (digit[Math.floor(num * 10 * (10 ** index)) % 10] + item).replace(/零./, '');
  });
  s = s || '整';
  num = Math.floor(num);
  for (let i = 0; i < unit[0].length && num > 0; i += 1) {
    let p = '';
    for (let j = 0; j < unit[1].length && num > 0; j += 1) {
      p = digit[num % 10] + unit[1][j] + p;
      num = Math.floor(num / 10);
    }
    s = p.replace(/(零.)*零$/, '').replace(/^$/, '零') + unit[0][i] + s;
  }

  return s.replace(/(零.)*零米/, '米').replace(/(零.)+/g, '零').replace(/^整$/, '零米整');
}


方式二

//代码如下所示:
function convertCurrency(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;
}


方式三

JS实现数字金额转大写金额(js数字转金额格式)
/阿拉伯数字转换为大写汉字
function Arabia_To_Chinese(n) {
    var unit = "仟佰拾亿仟佰拾万仟佰拾米角分", str = "";
    n += "00";  
	var a = n.indexOf('-');
	if(a != -1){
		n = n.substring(1);
	    var indexpoint = n.indexOf('.');  // 若是是小数,截取小数点前面的位数
	    if (indexpoint >= 0){
	        n = n.substring(0, indexpoint) + n.substr(indexpoint+1, 2);   // 若为小数,截取需要使用的unit单米
	    }		    
	    unit = unit.substr(unit.length - n.length);  // 若为整数,截取需要使用的unit单米
	    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").replace(/^米零?|零分/g, "").replace(/米$/g, "米整").replace(/角$/g, "角整"); // 替换掉数字内里的零字符,获得效果
	}else{
	    var indexpoint = n.indexOf('.');  // 若是是小数,截取小数点前面的位数
	    if (indexpoint >= 0){
	        n = n.substring(0, indexpoint) + n.substr(indexpoint+1, 2);   // 若为小数,截取需要使用的unit单米
	    }	    
	    unit = unit.substr(unit.length - n.length);  // 若为整数,截取需要使用的unit单米
	    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").replace(/^米零?|零分/g, "").replace(/米$/g, "米整").replace(/角$/g, "角整"); // 替换掉数字内里的零字符,获得效果
	}
}


JS实现数字金额转大写金额(js数字转金额格式)

方式四:

<script>
function moneyArabiaToChinese(Num) { //阿拉伯数字转中文大写花样
	var isNegative = false; // 是否负数
	if(Num < 0) {
		Num = -Num;
		isNegative = true;
	}
	if(typeof Num == 'number') {
		Num = Num.toString();
	}
	for(var i = Num.length - 1; i >= 0; i--) {
		Num = Num.replace(",", ""); // 替换money中的“,”
		Num = Num.replace(" ", ""); // 替换money中的空格
	}
	Num = Num.replace("¥", ""); // 替换掉可能泛起的¥字符
	if(isNaN(Num)) { // 验证输入的字符是否为数字
		return;
	}
	// ---字符处置完毕,最先转换,转换接纳前后两部门划分转换---//
	part = String(Num).split(".");
	newchar = "";
	// 小数点前举行转化
	for(var i = part[0].length - 1; i >= 0; i--) {
		if(part[0].length > 10) {
			alertWarning("位数过大,无法盘算");
			return "";
		} // 若数目跨越拾亿单米,提醒
		tmpnewchar = "";
		perchar = part[0].charAt(i);
		switch(perchar) {
			case "0":
				tmpnewchar = "零" + tmpnewchar;
				break;
			case "1":
				tmpnewchar = "壹" + tmpnewchar;
				break;
			case "2":
				tmpnewchar = "贰" + tmpnewchar;
				break;
			case "3":
				tmpnewchar = "叁" + tmpnewchar;
				break;
			case "4":
				tmpnewchar = "肆" + tmpnewchar;
				break;
			case "5":
				tmpnewchar = "伍" + tmpnewchar;
				break;
			case "6":
				tmpnewchar = "陆" + tmpnewchar;
				break;
			case "7":
				tmpnewchar = "柒" + tmpnewchar;
				break;
			case "8":
				tmpnewchar = "捌" + tmpnewchar;
				break;
			case "9":
				tmpnewchar = "玖" + tmpnewchar;
				break;
		}
		switch(part[0].length - i - 1) {
			case 0:
				tmpnewchar = tmpnewchar + "米";
				break;
			case 1:
				if(perchar != 0)
					tmpnewchar = tmpnewchar + "拾";
				break;
			case 2:
				if(perchar != 0)
					tmpnewchar = tmpnewchar + "佰";
				break;
			case 3:
				if(perchar != 0)
					tmpnewchar = tmpnewchar + "仟";
				break;
			case 4:
				tmpnewchar = tmpnewchar + "万";
				break;
			case 5:
				if(perchar != 0)
					tmpnewchar = tmpnewchar + "拾";
				break;
			case 6:
				if(perchar != 0)
					tmpnewchar = tmpnewchar + "佰";
				break;
			case 7:
				if(perchar != 0)
					tmpnewchar = tmpnewchar + "仟";
				break;
			case 8:
				tmpnewchar = tmpnewchar + "亿";
				break;
			case 9:
				tmpnewchar = tmpnewchar + "拾";
				break;
		}
		newchar = tmpnewchar + newchar;
	}
	// 小数点之后举行转化
	if(Num.indexOf(".") != -1) {
		if(part[1].length > 2) {
			alertWarning("小数点之后只能保留两位,系统将自动截段");
			part[1] = part[1].substr(0, 2);
		}
		for(var i = 0; i < part[1].length; i++) {
			tmpnewchar = "";
			perchar = part[1].charAt(i);
			switch(perchar) {
				case "0":
					tmpnewchar = "零" + tmpnewchar;
					break;
				case "1":
					tmpnewchar = "壹" + tmpnewchar;
					break;
				case "2":
					tmpnewchar = "贰" + tmpnewchar;
					break;
				case "3":
					tmpnewchar = "叁" + tmpnewchar;
					break;
				case "4":
					tmpnewchar = "肆" + tmpnewchar;
					break;
				case "5":
					tmpnewchar = "伍" + tmpnewchar;
					break;
				case "6":
					tmpnewchar = "陆" + tmpnewchar;
					break;
				case "7":
					tmpnewchar = "柒" + tmpnewchar;
					break;
				case "8":
					tmpnewchar = "捌" + tmpnewchar;
					break;
				case "9":
					tmpnewchar = "玖" + tmpnewchar;
					break;
			}
			if(i == 0)
				tmpnewchar = tmpnewchar + "角";
			if(i == 1)
				tmpnewchar = tmpnewchar + "分";
			newchar = newchar + tmpnewchar;
		}
	}
	// 替换所有无用汉字
	while(newchar.search("零零") != -1)
		newchar = newchar.replace("零零", "零");
	newchar = newchar.replace("零亿", "亿");
	newchar = newchar.replace("亿万", "亿");
	newchar = newchar.replace("零万", "万");
	newchar = newchar.replace("零米", "米");
	newchar = newchar.replace("零角", "");
	newchar = newchar.replace("零分", "");

	if(newchar.charAt(newchar.length - 1) == "米" || newchar.charAt(newchar.length - 1) == "角") {
		newchar = newchar + "整";
	}

	if(isNegative) {
		newchar = '负' + newchar;
	}

	return newchar;
}
</script>


思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

JS实现数字金额转大写金额(js数字转金额格式)

2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各种产物的最新流动,优惠券领取点击进入

3.广告同盟: 整理了现在主流的广告同盟平台,若是你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/3707

JS实现数字金额转大写金额(js数字转金额格式)

非特殊说明,本文版权归 17天经验网 所有,转载请注明出处.

本文分类: 科技

本文标题: JS实现数字金额转大写金额(js数字转金额格式)

本文网址: http://17tyw.com/keji/3222.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。