完成 toChineseNum 函数
可以将数字转换成中文大写的表示,处理到万级别
例如
toChineseNum(12345); // 一万二千三百四十五
初稿
const toChineseNum = (num) => {
const keys = ["零","一","二","三","四","五","六","七","八","九"];
var ge,
shi,
bai,
qian,
wan,
str = "";
wan = parseInt(num / 10000);
num %= 10000;
qian = parseInt(num / 1000);
num %= 1000;
bai = parseInt(num / 100);
num %= 100;
shi = parseInt(num / 10);
num %= 10;
ge = parseInt(num);
if(wan){
str = str.concat( toChineseNum(wan), "万" );
}
if(qian){
str = str.concat( keys[qian], "千" );
}else if(wan){
str = str.concat( "零" );
}
if(bai){
str = str.concat( keys[bai], "百" );
}else if(qian){
str = str.concat( "零" );
}
if(shi){
str = str.concat( keys[shi], "十" );
}else if(bai){
str = str.concat( "零" );
}
if(ge){
str = str.concat( keys[ge] );
}else if(!shi){
str = str.slice(0,-1);
}
return str;
}
个人的思路是正序填充,并且只考虑到除去连接的零和末尾的零,然后按四位进行递归
看了大神的回答对 map() 、 regexp 和逆序填充有了更深的认识
const toChineseNum = (num) => {
const keys = ["零","一","二","三","四","五","六","七","八","九"];
const count = ["","十","百","千"];
var str = "",
nums = num.toString().split("").reverse();
nums.map(function(value, index){
str = keys[value] +
(value == 0 ? "" : count[ index > 3 ? index % 4 : index ]) +
(index == 4 ? "万" : "") +
str;
})
/*
* 需要去掉的零:
* 1.后面跟着零的零
* 2.最后连续的零
* 3.万前面的零
*/
return str.replace(/零(?=零)|零$|零(?=万)/g,"");
}