把数字转换成中文

完成 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,"");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值