js实现数字小写转大写

时间:2023-07-17 16:00:55来源:互联网

下面小编就为大家分享一篇js实现数字小写转大写,具有很好的参考价值,希望对大家有所帮助。

有时候业务需要做大写【一二三四五六七八九十】的标题,那对于js普通的数据结构排序是按【0123456789】。所以我们需要做一些数字的转换,实现小写转大写才能满足业务需求。

js实现数字转大写

//阿拉伯数字转大写,整数转大写
const numToCapital = (num, type = '') => {
  if (!num) return 0
  const strNum = Number((num + '').replace(/[,,]*/g, '')) + '' // 记录字符
  num = parseInt(Number(strNum)) // 转为整数,
  let capitalAr = '零一二三四五六七八九十'
  let unitAr = ['十', '百', '千', '万', '十', '百', '千', '亿', '十', '百', '千']
  if (type) {
    capitalAr = '零壹贰叁肆伍陆柒捌玖拾'
    unitAr = ['拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟'] // 单位
  }
  const resultAr = [] // 记录结果,后边json.in就可
  let index = strNum.length - 1 //记录位数
  let idx = 0 // 记录单位
  let percent = 10
  const turnNum = (num, percent, index) => {
    const unit = num / percent
    const capital = capitalAr[Number(strNum[index])]
    if (unit < 1) {
      resultAr.push(capital)
      // 出现11【一十一】这种情况
      if (Number(strNum[index]) === 1 && (strNum.length === 2 || strNum.length === 6 || strNum.length === 10)) {
        resultAr.pop()
      }
      return false //结束递归
    } else {
      if (capital === '零') {
        // 万和亿单位不删除
        if (!['万', '亿'].includes(resultAr[resultAr.length - 1])) {
          resultAr.pop()
        }
        // 前面有零在删掉一个零
        if (resultAr[resultAr.length - 1] === '零') {
          resultAr.pop()
        }
      }
      resultAr.push(capital)
      // 过滤存在【零万】【零亿】这种情况
      if (['万', '亿'].includes(resultAr[resultAr.length - 2]) && capital === '零') {
        resultAr.pop()
      }
      // 过滤【1亿万】这种情况
      if (resultAr[0] === '万' && resultAr[1] === '亿') {
        resultAr.shift()
      }
      // 末尾【零】删掉
      if (resultAr[0] === '零') {
        resultAr.pop()
      }
      resultAr.push(unitAr[idx++])
      turnNum(num, percent * 10, --index)
    }
  }
  turnNum(num, percent, index)
  return resultAr.reverse().join('')
}

// console.log(numToCapital(1512345672, 'capital'))
// 壹拾伍亿壹仟贰佰叁拾肆万伍仟陆佰柒拾贰

console.log(numToCapital('125,0000,0000'))
//一百二十五亿
console.log(numToCapital('10,0000'))
//十万
console.log(numToCapital('12,0000'))
//十二万
console.log(numToCapital('10,0010'))
//十万零一十
console.log(numToCapital('100,1000', true))
//壹佰万壹仟
console.log(numToCapital('0010'))
//十
本站部分内容转载自互联网,如果有网站内容侵犯了您的权益,可直接联系我们删除,感谢支持!