js 金钱转中文大写

如果喜欢,可以点个攒~~

直接上代码

let toMoneyCapital = function(money = 0) {
  if (typeof money !== 'number') throw Error('Require a number');
  let cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
  let cnIntUnits = ['', '拾', '佰', '仟']
  let cnIntUnits1 = ['元', '万', '亿'];
  let cnDecUnits = ['角', '分', '毫', '厘'];
  let [integer, decimal] = money.toFixed(2).split('.')
  // 整数部分
  let capital = ''
  let intStrArr = integer.split(/\B(?=(?:\d{4})+$)/g).reverse()
  for (let i = 0; i < intStrArr.length; i++) {
    capital = cnIntUnits1[i] + capital
    let intStr = intStrArr[i].split('').reverse()
    let countZero = 0
    for (let j = 0; j <intStr.length; j++) {
      let num = intStr[j]
      if (num === '0') {
        countZero++
      } else {
        if (countZero > 0) {
          capital = cnNums[0] + capital
          countZero = 0
        }
        capital = cnNums[num] + cnIntUnits[j] + capital
      }
    }
    if (countZero > 0) capital = cnNums[0] + capital
  }
  capital = capital.replace(/零([万亿])/g, '$1零').replace(/零([万亿])/g, '$1零')
    .replace(/零+/g, '零')
    .replace(/(.*)零(元)/g, '$1$2')
    .replace(/亿万/g, '亿')
  // 小数部分
  let capital2 = ''
  for (let i = 0; i < decimal.length; i++) {
    let num = decimal[i]
    if (num !== '0') {
      capital2 += cnNums[num] + cnDecUnits[i]
    }
  }
  return capital + (capital2 || '整')
}

 

posted on 2022-02-16 15:55  hiyonx  阅读(58)  评论(0)    收藏  举报

导航