*** 实现数字金额转大写金额

访客4年前关于黑客接单793

数字大写对照表

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

*** 将金额数字转大写的方式封装 ,下面为人人整理些常用的实现方式。


方式一:

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;
}


方式三

/ *** 数字转换为大写汉字
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, "角整"); // 替换掉数字内里的零字符,获得效果
	}
}


方式四:

<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米代金券、领会最新阿里云产物的种种优惠流动点击进入

相关文章

延长车载试验爆炸怎么回事 事故造成5人死亡3人失联5人受伤

中新网西安10月28日电 (记者 梅镱泷)陕西延长县委宣传部28日披露,延长县境内27日发生一起车载试验装置爆炸事故,事故造成5人死亡,3人失联,5人受伤。 据了解,2019年10月27日,湖南省永...

黑客怎么获得QQ密码的(黑客怎么破解号码)

黑客怎么获得QQ密码的(黑客怎么破解号码)

只知道QQ号可以盗号吗?只求防盗!! 1、呵呵,黑客盗号有好几种方法呢,一般有以下两种:1﹑制作盗号木马如果你运行了他们的木马,或者进了他们挂马的网页,就会被盗哦2﹑他们用专属软件扫描弱密码。2、如果...

怎么找高级一点的黑客,手机黑客软件大全网站,黑客赚钱的渠道和方式

}登录的帐户用于协作/同步/等; 这些是付费的功用。 正如我前面说到的,这几个功用关于开发人员来说很棒,但对你来说,或许并不关怀。 事实上,假如你一般需求对你的客户端机械能保密,就像咱们在 Secu...

房产知识:房产证、土地证及契税

相信现在有很多的朋友们对于房产证、土地证及契税都想要了解吧,那么今天小编就来给大家针对房产证、土地证及契税进行一个介绍吧,希望小编介绍的内容能够为大家起到帮助哦 你好,房子在江宁的话,权证在江宁房管局...

火车票儿童票标准(火车票儿童票标准2019)

一名成年人旅客可以免费携带一名身高不足1.2米的儿童。如果身高不足1.2米的儿童超过一名时,一名儿童免费,其他儿童请购买儿童票。儿童身高为1.2~1.5米。 年龄和身高都要看未成年人,主要看身高现在1...

陌生人社交:探探、soul产品分析报告

陌生人社交:探探、soul产品分析报告

编辑导语:这是一个社交网络的时代,中国社交网络的利用率高出了90%,险些所有网民都在利用微信、微博、QQ等种种社交软件。然而,熟人社交已经无法满意年青人日益增长的社交需求,于是生疏人社交平台在90后及...