js将数值转为人民币大写

13 阅读1分钟
    digitToChineseCapital(digit) {
      const numberMap = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖'];
      const unitMap = ['', '拾', '佰', '仟', '万', '拾万', '佰万', '仟万', '亿', '拾亿', '佰亿', '仟亿'];
      const decimalUnitMap = ['角', '分'];

      // 获取整数部分和小数部分
      let integerPart = String(Math.floor(digit));
      let decimalPart = (digit % 1).toFixed(2).slice(-2);

      // 处理整数部分
      let chineseInteger = '';
      if (integerPart === '0') {
        chineseInteger = '零';
      } else {
        for (let i = integerPart.length - 1; i >= 0; i--) {
          chineseInteger = numberMap[parseInt(integerPart[i])] + unitMap[integerPart.length - 1 - i] + chineseInteger;
        }
        chineseInteger = chineseInteger.replace(/零[零拾佰仟万]*$/, '').replace(/^零+/, '');
      }

      // 添加单位“元”,但如果是零则不添加
      if (chineseInteger !== '零' && !chineseInteger.endsWith('元')) {
        chineseInteger += '元';
      }

      // 处理小数部分
      let chineseDecimal = '';
      for (let i = 0; i < decimalPart.length; i++) {
        if (decimalPart[i] !== '0' || (i === 1 && decimalPart[i] === '0' && decimalPart[i - 1] !== '0')) {
          chineseDecimal += numberMap[decimalPart[i]] + decimalUnitMap[i];
        }
      }

      // 去除小数部分多余的零
      chineseDecimal = chineseDecimal.replace(/^零+/, '');

      // 如果小数部分为空或者只有分,则不显示“角”
      if (chineseDecimal.endsWith('角')) {
        chineseDecimal = chineseDecimal.slice(0, -1);
      }

      // 返回最终结果
      return `${chineseInteger}${chineseDecimal ? ('零' + chineseDecimal).replace(/^零+/, '') : ''}`;
    },
    
   this.digitToChineseCapital(23.03)