阿拉伯数字转中文

1,828 阅读1分钟
最近在项目中用到将阿拉伯数字转为中文的需求
    function numberToChinese(num){
        var chnNumChar = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']
        var chnUnitChar = ['', '十', '百', '千']
        var strIns = ''
        var chnStr = ''
        var unitPos = 0
        var zero = true
        while (num > 0) {
            var v = num % 10
            if (v === 0) {
            if (!zero) {
                zero = true
                chnStr = chnNumChar[v] + chnStr
            }
            } else {
            zero = false
            strIns = chnNumChar[v]
            strIns += chnUnitChar[unitPos]
            chnStr = strIns + chnStr
            }
            unitPos++
            num = Math.floor(num / 10)
        }
        return chnStr
    }

但是在使用中发现10-19会转换成'一十','一十一'这种情况,这当然不是我们想要的
所以对于字符串做判断替换
    if (chnStr[0] === '一' && chnStr[1] === '十') {
        chnStr = chnStr.replace('一十', '十')
      }

最终代码为:
    function numberToChinese(num){
        var chnNumChar = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']
        var chnUnitChar = ['', '十', '百', '千']
        var strIns = ''
        var chnStr = ''
        var unitPos = 0
        var zero = true
        while (num > 0) {
            var v = num % 10
            if (v === 0) {
            if (!zero) {
                zero = true
                chnStr = chnNumChar[v] + chnStr
            }
            } else {
            zero = false
            strIns = chnNumChar[v]
            strIns += chnUnitChar[unitPos]
            chnStr = strIns + chnStr
            if (chnStr[0] === '一' && chnStr[1] === '十') {
                chnStr = chnStr.replace('一十', '十')
            }
            }
            unitPos++
            num = Math.floor(num / 10)
        }
        return chnStr
    }