numberToChinese

实现一个函数,将数字转为中文输出,不超过 10000 亿
numberToChinese(100010001) ==> 一亿零一万零一

export function numberToChinese(num: number) {
  if (isNaN(num) || typeof num !== 'number' || num >= 1000000000000) {
    return '无效的数字或数字过大'
  }
  const chnNumber = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']
  const chnUnits = ['', '十', '百', '千']
  const chnGroupUnits = ['', '万', '亿']

  if (num === 0) {
    return chnNumber[0]
  }

  let result = ''
  let unitIndex = 0
  let groupIndex = 0

  while (num > 0) {
    const digit = num % 10

    if (digit !== 0) {
      result = chnNumber[digit] + chnUnits[unitIndex] + result
      // 排除“零零”、“零万”、“零亿”
    } else if (
      result.length > 0 &&
      result[0] !== chnNumber[0] &&
      result[0] !== chnGroupUnits[groupIndex]
    ) {
      result = chnNumber[0] + result
    }

    num = Math.floor(num / 10)

    if (num > 0 && ++unitIndex === 4) {
      // 排除“亿万”
      if (groupIndex > 0 && chnGroupUnits[groupIndex] === result[0]) {
        result = result.slice(1)
      }
      // 加零处理,例如 1001000、10010000000
      // const zero =
      //   num % 100 === 0 && result.length > 0 && result[0] !== chnNumber[0] ? chnNumber[0] : ''
      result = chnGroupUnits[++groupIndex] + result
      unitIndex = 0
    }
  }

  return result.replace(/^一十/, '十')
}