js转换汉字金额

原文链接: https://blog.learnzs.com/2021/08/01/277/

/**
 * 数字转金额
 * @param {number} value
 * @return {string|*}
 */
function convertNumberToMoney (value) {
  if (isNaN(value)) return ''
  return value.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,')
}

/**
 * 数字转大写金额
 * @param {number} value
 * @return {string}
 */
function convertMoneyToChinese(value) {
  const digitArr = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
  const digitUnitArr = ['', '万', '亿']
  const digitSuffixArr = ['', '拾', '佰', '仟']

  // 整数部分
  const integerValueArr = String(Math.trunc(Math.abs(value)).split('')

  if (integerValueArr.length > 12) {
    throw new Error('超出最大可转换金额')
    return '超出最大可转换金额'
  }

  // 分割
  const unitValueArr = []
  integerValueArr.reverse().forEach((item, i, arr) => {
    if (unitValueArr.length === 0) {
      unitValueArr.push([item])
      return
    }
    const lastUnitItem = unitValueArr[unitValueArr.length - 1]
    if (lastUnitItem.length < 4) {
      lastUnitItem.push(item)
    } else {
      unitValueArr.push([item])
    }
  })

  // 转换
  const clearZero = (val) => val.reverse().join('').replace(/零{2,}/g, '零').replace(/(.+)(零$)/g, '$1')
  const integerResult = clearZero(unitValueArr.map((_, i) => {
    const unitValue = clearZero(_.map((_item, _index) => {
        if (+_item === 0) {
          return digitArr[_item]
        }
        return digitArr[_item] + digitSuffixArr[_index]
      }))
    return unitValue + (unitValue !== '零' ? digitUnitArr[i] : '')
  }))

  // 小数部分
  let decimalResult = ''
  if(value - Math.trunc(value) > 0) {
    const decimalArr = value.toFixed(2).substring(value.toFixed(2).indexOf('.') + 1).split('')
    decimalResult = `元零${digitArr[decimalArr[0]]}`
    if(decimalArr.length > 1){
      decimalResult += `${digitArr[decimalArr[1]]}`
    }
  }

  // 负数
  const isMinus = value < 0

  return (isMinus ? '负' : '') + integerResult + (decimalResult || '元整')
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以回答这个问题。以下是将数字金额转换为中文大写金额JavaScript代码: ```javascript function convertToChineseNumeral(amount) { const chineseNumeral = ["零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"]; const chineseUnit = ["", "拾", "佰", "仟"]; const chineseBigUnit = ["", "萬", "亿", "兆"]; let num = parseFloat(amount); let chineseAmount = ""; if (isNaN(num)) { return ""; } let isNegative = num < 0; if (isNegative) { num = -num; } let fraction = Math.round((num - Math.floor(num)) * 100); if (fraction == 0) { chineseAmount += "整"; } else { chineseAmount += chineseNumeral[Math.floor(fraction / 10)] + "角"; chineseAmount += chineseNumeral[fraction % 10] + "分"; } num = Math.floor(num); let unitIndex = 0; while (num > 0) { let currentUnit = ""; for (let i = 0; i < 4 && num > 0; i++) { let currentNumeral = num % 10; if (currentNumeral > 0) { currentUnit = chineseUnit[i] + currentUnit; currentUnit = chineseNumeral[currentNumeral] + currentUnit; } else if (currentUnit != "") { currentUnit = chineseNumeral[currentNumeral] + currentUnit; } num = Math.floor(num / 10); } if (currentUnit != "") { currentUnit += chineseBigUnit[unitIndex]; } chineseAmount = currentUnit + chineseAmount; unitIndex++; } if (chineseAmount == "") { chineseAmount = chineseNumeral[0]; } if (isNegative) { chineseAmount = "负" + chineseAmount; } return chineseAmount; } console.log(convertToChineseNumeral(123456789.01)); // 壹亿贰仟叁佰肆拾伍萬陆仟柒佰捌拾玖元零壹分 ``` 希望这个代码能帮到你。如果你有其它问题,欢迎继续询问。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值