JS阿拉伯数字转汉字数字

最近做的项目的一个需求,看着很简单,但实现起来还是很有意思的,于是记录下来。
只写了一百以内的,以上的自行拓展即可。

一开始我的主要思路就是把数字转换为数组下标来取出对应的汉字拼接一下,然后发现对于两位数的转化很不理想。

例如要转化22 55 ,直接转化为中文的话就是二二 五五,这显然不符合我们常用的写法。

于是加了个处理,两位数字的第一位转化为数字 + 十,例如二二 五十五,这下貌似是正常了。于是自信满满的提交代码,然后被测试同学给提了bug,我是百思不得其解,由于数字量不大,我一番穷举法测试下也没感觉有啥问题。

于是去找测试同学理论,他让我试了下11然后给转成了一十一,我乍一看好像没啥问题,然后他指了指双十一的广告道:按你这样的写法他应该是双一十一了~ 我恍然大悟一十一这个写法乍一看没什么问题,但显然也是不符合书写习惯的,一般情况下都应该写成十一 十二 十九这样的,把给略去。于是又是一番处理,终于写成了如下代码。

如需扩展代码的话还是需要再多考虑下我们的日常书写习惯。

    /**
    * 转化中文数字
    * @param {String} num 需要转化的数字
    */
    var toChinesNum = function (num) {
        var changeNum = ['一', '二', '三', '四', '五', '六', '七', '八', '九', '十'],
            newNum = '',
            arr = num.toString().split('');
        arr[0] = parseInt(arr[0]) - 1;
        if (arr[0] == -1 && arr.length == 1) { return '零'; }
        if (arr.length > 1) {
            arr[1] = parseInt(arr[1]) - 1;
            if (!arr[0]) {
                newNum = !arr[0] && arr[1] == -1 ? changeNum[9] : changeNum[9] + changeNum[arr[1]];
            } else {
                newNum = (changeNum[arr[0]] + changeNum[9]) + (changeNum[arr[1]] ? changeNum[arr[1]] : '')
            }
        } else {
            newNum = changeNum[arr[0]];
        }
        return newNum;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值