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