2021-02-16

JS实现金额转大写(不包含小数)

题目如下:

要求输入一串低于10位的数字,输出这串数字的中文大写

例子:

数字大写
100001壹拾万零壹元整
1011壹仟零壹拾壹元整
1000000123壹拾亿零壹佰贰拾叁元整
10000123壹仟万零壹佰贰拾叁元整
101234壹拾万壹仟贰佰叁拾肆元整
100001234壹亿零壹仟贰佰叁拾肆元整
// 输入参数
let n = parseInt(window.prompt('input'));
// 打印最终的值
console.log(toMoney(n));
// 将金额转为大写	
function toMoney(money){

	// 最终返回的字符创
	let str = "元整";
	// 计算连续0的个数
	let isZero = 0;

	// i是当前读取的位数,如果传入的money被取干净,则说明转换完毕
	for (var i = 1; money > 0; i++, money -= money%10, money /=10) {

		// 如果当前这位数为0
		if(money%10 == 0){
			// 0的个数加1
			isZero ++;

			// 如果是第一个0
			if(isZero == 1 && i % 4 != 1){

				// 当这个0,不,在个位、万位、亿位时才需要加零
				str = numberToCapitalization(0) + str;
			} 

		}
		// 如果当前位不是0
		else{
			
			// 获取每个阶段的节点,例如:万位(5-8)、亿位(9-12)
			let a = parseInt((i-1)/4)*4 + 1;

			// 如果前一阶(也就是万位)的全为空,加上零,并且保证个位-千位没有加零
			if(i - (parseInt((i-1)/4)-1)*4 - 1 <= isZero && i - 5 >= isZero){
				// 如果之前一阶的全为空,加上零
				str = numberToCapitalization(0) + str;
			}

			// 如果当前这位数到万位的距离比连续0的个数还短,说明前面没有附加上万
			if(i - a <= isZero && i - a != 0 && i >= a){

				// 加上单位
				str = toCompany(a) + str;
			}

			// 将数字转为大写,并加上单位
			str = numberToCapitalization(money%10) + toCompany(i) + str;
			
			// 计数器置空(计算连续0的个数)
			isZero = 0;
		}
	}
	return str;
}

/* 获取单位 */
function toCompany(num){
	switch(num){
		case 1:
			return "";
		case 2:
			return "拾";
		case 3:
			return "佰";
		case 4:
			return "仟";
		case 5:
			return "万";
		case 6:
			return "拾";
		case 7:
			return "佰";
		case 8:
			return "仟";
		case 9:
			return "亿";
		case 10:
			return "拾";
		case 11:
			return "佰";
		case 12:
			return "仟";
		case 13:
			return "万";
	}
}

/* 将数字转为大写 */
function numberToCapitalization(number){
	
	switch(number){
		case 1:
			return "壹";
		case 2:
			return "贰";
		case 3:
			return "叁";
		case 4:
			return "肆";
		case 5:
			return "伍";
		case 6:
			return "陆";
		case 7:
			return "柒";
		case 8:
			return "捌";
		case 9:
			return "玖";
		case 0:
			return "零";
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值