数字转大写中文

写一个函数,将数字转化为中文的大写形式,返回字符串,数字不超过1亿,小数点后保留两位。

JS 语法

let CHNCHAR = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖'];

function transfer(x){
	let str = '';
	
	if(typeof(x) != 'number' || isNaN(x) || x > 100000000) return str;
	
	let iWan = Math.floor(x/10000);
	let i1   = Math.floor(x - iWan * 10000);
	let iJF  = Math.round(x * 100) % 100;
	let iJ   = Math.floor(iJF / 10);
	let iF   = iJF % 10;
	

	
	if(iWan != 0){
		str += transferS(iWan) + '万';
	}
	
	// 只有在万位的个位不是0,以及千位不是0的情况下,才不用加零
	if(!(iWan % 10 != 0 && Math.floor(i1 / 1000))){
		if(i1 != 0 && iWan != 0){
			str += CHNCHAR[0];
		}
	}
	// 0
	
	if(i1 != 0){
		str += transferS(i1);
	}
	
	if(str != ''){
		str += '元';
		if(iJ != 0 || iF != 0){
			if(iJ != 0){
				str += CHNCHAR[iJ] + '角';
			}
			
			if(iF != 0){
				str += CHNCHAR[iF] + '分';
			}
		}else{
			str += '整';
		}
	}else{
		if(iJ != 0 || iF != 0){
			if(iJ != 0){
				str += CHNCHAR[iJ] + '角';
			}
			
			if(iF != 0){
				str += CHNCHAR[iF] + '分';
			}
		}else{
			str += '零元整';
		}
	}
	return str;
}

function transferS(x){
	let str = '';
	
	if(typeof(x) != 'number' || isNaN(x) || x > 10000) return str;
	x = Math.floor(x);
	
	let i1 = x % 10;
	let iT = Math.floor(x / 10) % 10;
	let iH = Math.floor(x / 100) % 10;
	let iS = Math.floor(x / 1000) % 10;
	
	if(iS != 0){ // 千位不为0
		str += CHNCHAR[iS] + '仟';
		if(iH != 0){ // 千位不为0,百位不为0
			str += CHNCHAR[iH] + '佰';
			if(iT != 0){// 千位不为0,百位不为0,十位不为0
				str += CHNCHAR[iT] + '拾';
				if(i1 != 0){// 千位不为0,百位不为0,十位不为0,个位不为0 // 1234
					str += CHNCHAR[i1];
				}
				// 千位不为0,百位不为0,十位不为0,个位为0,什么都不用做
				// 1230
			}else if(i1 != 0){// 千位不为0,百位不为0,十位为0,个位不为0 // 1204
				str += CHNCHAR[0] + CHNCHAR[i1];
			}
			// 千位不为0,百位不为0,十位为0,个位为0,什么都不用做
			// 1200
		}else{// 千位不为0,百位为0
			if(iT != 0){// 千位不为0,百位为0,十位不为0 // 102X
				str += CHNCHAR[0] + CHNCHAR[iT] + '拾';
				if(i1 != 0){// 千位不为0,百位为0,十位不为0,个位不为0 // 1034
					str += CHNCHAR[i1];
				}
				// 千位不为0,百位为0,十位不为0,个位为0,什么都不用做
				// 1030
			}else{// 千位不为0,百位为0,十位为0
				if(i1 != 0){// 千位不为0,百位为0,十位为0,个位不为0 // 1004
					str += CHNCHAR[0] + CHNCHAR[i1];
				}
				// 千位不为0,百位为0,十位为0,个位为0,什么都不用做
				// 1000
			}
		}
	}else{// 千位为0
		if(iH != 0){ // 千位为0,百位不为0
			str += CHNCHAR[iH] + '佰';
			if(iT != 0){// 千位为0,百位不为0,十位不为0
				str += CHNCHAR[iT] + '拾';
				if(i1 != 0){// 千位为0,百位不为0,十位不为0,个位不为0 // 234
					str += CHNCHAR[i1];
				}
				// 千位为0,百位不为0,十位不为0,个位为0,什么都不用做
				// 230
			}else if(i1 != 0){// 千位为0,百位不为0,十位为0,个位不为0 // 204
				str += CHNCHAR[0] + CHNCHAR[i1];
			}
			// 千位为0,百位不为0,十位为0,个位为0,什么都不用做
			// 200
		}else{// 千位为0,百位为0
			if(iT != 0){// 千位为0,百位为0,十位不为0 // 2X
				str += CHNCHAR[iT] + '拾';
				if(i1 != 0){// 千位为0,百位为0,十位不为0,个位不为0 // 24
					str += CHNCHAR[i1];
				}
				// 千位为0,百位为0,十位不为0,个位为0,什么都不用做
				// 20
			}else{// 千位为0,百位为0,十位为0
				if(i1 != 0){// 千位为0,百位为0,十位为0,个位不为0 // 4
					str += CHNCHAR[i1];
				}else{
				// 千位为0,百位为0,十位为0,个位为0,什么都不用做
				// 0
					str += CHNCHAR[0];
				}
				
			}
		}
	}
	
	return str;
}

console.log(transfer(12345678));
console.log(transfer(12305678));
console.log(transfer(12340678));
console.log(transfer(12340678.51));
console.log(transfer(12340678.01));
console.log(transfer(12340678.50));
console.log(transfer(5678));
console.log(transfer(0.47));
console.log(transfer(0));
console.log(transfer(578));


输出:
壹仟贰佰叁拾肆万伍仟陆佰柒拾捌元整
壹仟贰佰叁拾万零伍仟陆佰柒拾捌元整
壹仟贰佰叁拾肆万零陆佰柒拾捌元整
壹仟贰佰叁拾肆万零陆佰柒拾捌元伍角壹分
壹仟贰佰叁拾肆万零陆佰柒拾捌元壹分
壹仟贰佰叁拾肆万零陆佰柒拾捌元伍角
伍仟陆佰柒拾捌元整
肆角柒分
零元整
伍佰柒拾捌元整
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Valar Morgulish

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值