会遇到这样的情况,需要将数字123
转换成对应的中文写法 一百二十三
、 1234
转成对应的中文写法 一千二百三十四
1、基础版
下面的代码只处理到万位
基本思路
- 将输入的数字转换为字符串,遍历
- 将每一项数字转为对应的汉字,并添加单位
- 解决多个相邻的零的情况,只保留一个。比如
1001
,应该是一千零一
- 若最后一个数字是
0
,则删除最后这个数字对应的零
- 若输入的是个位数,而是是
0
,那么这个唯一的零,需要保留
function toChinese(number){
const d=["","十","百","千","万"];
number=number+"";
let res="";
for(let i=0;i<number.length;i++){
const w=number.length-i-1;
const han=goo(number[i]);
if(han=="零"){
res+="零";
}else{
res+=han+d[w];
}
}
// 把连续的零 合并成一个,并且去掉最后一个零
if(res.length>1){ // 排除 只输入一个数字0 的情况,
res=res.replace(/零{1,}/,"零").replace(/零$/,"");
}
console.log(number,'-------对应的中文写法',res)
}
// 0-9 转化成0到9 ,这个完全可以用个数组代替 ,简单省事
function goo(n){
switch(n){
case "0": return "零";break;
case "1":return "一";break;
case "2":return "二";break;
case "3":return "三";break;
case "4":return "四";break;
case "5":return "五";break;
case "6":return "六";break;
case "7":return "七";break;
case "8":return "八";break;
case "9":return "9";break;
default :return "";break;
}
}
toChinese(1234);
toChinese(1000);
toChinese(10001);
toChinese(10234);
toChinese(1);
toChinese(19);
2、函数foo的修改
完全可以将函数
foo
中switch case
的写法,改成数组形式的。如下
function goo(n) {
const arr=["零","一","二","三","四","五","六","七","八","九"];
return arr[Number(n)];
}
3、万位以上的输入怎么处理呢
要是输入的是6位数字,甚至7位数字,这个怎么处理,仍然可以将之转换为汉字写法呢?
基本思路:
- 将输入的数组分为两组,5位数及其以下是一个整体,5位以上的部分是另个整体
- 处理过程和上面的是一样的,
// 判断输入数字的长度
if(length<=5){
// 按照前面的代码,将数字转为对应的汉字
}else{
//
res = toChinese(number.substr(0, number.length - 5)) + "万" + toChinese(number.substr(number.length - 5));
}