将正整数数字转成汉字

例子:9242384235 转为:九十二亿四千两百三十八万四千两百三十五

只做了千亿内的数字的转换!!

var numsArr = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]
    function getChinese (num) {
      let chinese = []
      num = num.toString()
      // 将数字转为字符并替换成中文放进chinese数组
      for (let i of num) {
        chinese.push(numsArr[i])
      }
      if (chinese.length == 1) return chinese[0]
      return getNumBySpilt(chinese)
    }

    function getNumBySpilt (chi) {
      chi = chi.join('')
      let arr = []
      let len = chi.length % 4
      // 将数字按照【亿】【万】单位分成数组
      if (len !== 0) {
        arr.push(chi.slice(0, len))
        if (chi.length > 4) {
          chi = chi.slice(len, chi.length)
          let temp = chi.match(/.{1,4}/g)
          arr = arr.concat(temp)
        }
      }


      let temps = []
      let str = ["万", "亿", "万", "亿"]
      let count = 0

      arr.forEach((item, index) => {
        arr[index] = checkItem(item, index)
      })
      for (let i = arr.length - 1; i >= 0; i--) {
        if (count == 1 && arr[i] !== "") {
          temps.unshift(["万"])
        } else if (count == 2) {
          temps.unshift(["亿"])
        }
        temps.unshift(arr[i])
        count++
      }
      temps = temps.join("")
      return temps.split(",").join("")
    }

    function checkItem (item, index) {
      let items = []
      let zero = 0
      for (let i = item.length - 1; i >= 0; i--) {
        if (item[i] == "零") zero++

        if (i == item.length - 2 && item[i] !== "零") {
          items.unshift("十")
        }
        if (i == item.length - 3 && item[i] !== "零") {
          items.unshift("百")
        }
        if (i == item.length - 4 && item[i] !== "零") {
          items.unshift("千")
        }
        // 判断每个数组的最后一位是否为零
        let endIFlag = i == item.length - 1 && item[i] == "零";
        // 判断每个数组的二三位以及它的前后元素是否都为零
        let centerIFlag = item[i] == "零" && item[i - 1] === "零" && item[0] == "零"
        // 判断每个数组的倒数第二位以及它后面的元素是否为零
        let secendIFlag1 = i == item.length - 2 && item[i] == "零" && item[i + 1] == "零"
        // 判断每个数组的第二位以及它后面的元素是否为零
        let secendIFlag = item[i] == "零" && i == 1 && item[i + 1] === "零"

        if (!endIFlag && !centerIFlag && !secendIFlag1 && !secendIFlag) {
          items.unshift(item[i])
        }
      }

      // 该数组全为零时返回“”
      if (zero == 4) return ""
      // 对“一十万”“一十亿”的情况作处理,改为“十万”“十亿”
      for (let i = 0; i < items.length; i++) {
        if (items[i] == "一" && items[i + 1] == "十" && i + 2 == items.length) {
          items.splice(i, 1)
        }
      }
      return items
    }
let num = 1090720500
console.log(getChinese(num));
let num1 = 10700
console.log(getChinese(num1));
let num2 = 20
console.log(getChinese(num2));

结果

有问题欢迎在评论区指正!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值