Skip to content

阿拉伯数字转中文

js
function num2cn(n) {
  const isLose = n < 0 // 是不是负数
  n = Math.abs(n).toString()
  const res = [], len = n.length
  
  // 四位做一次转译
  for (let i = len; i > 0; i -= 4) {
    res.push(NumToChina(n.slice(Math.max(0, i - 4) ,i)))
  }

  const unit = ['', '', '亿']
  for (let i = 0; i < res.length; i++) {
    // 如果四位数都为 0,则会为空,这种不需要填单位了
    if (res[i] === '') continue
    res[i] += unit[i]
  }
  
  isLose && res.push('')

  return res.reverse().join('')
}

function NumToChina(n) {
  n = n.toString()
  if (n === '0') return ''
  const unit = ['', '','', '']
  const number = ['','','','','','','','','','']
  const len = n.length
  let res = ''
  for (let i = 0; i < len; i++) {
    const num = Number(n[i])
    // 多个零只加入一个零,如 1006
    if (num !== 0) {
      if (n[i - 1] === '0') res += ''
      // 先数字后单位
      res += number[num] + unit[len - i - 1]
    }
  }
  // 12 会为 一十二,但正确应该为 十二,所以当十位数是一且只有两位数字的时候,去掉前面的一
  if (len === 2 && n[0] === '1') res = res.slice(1)
  return res
}