价格由小写转成大写,把小数转成[“角“, “分“, “厘“, “毫“]

convertToChinese(num) {
      // 确保传入的num是字符串,并处理小数部分(如果有的话)
      var numStr = num.toString();
      var [integerPartStr, decimalPartStr] = numStr.split(".");
      var integerPart = parseInt(integerPartStr, 10);

      // 中文数字
      const cnNums = [
        "零",
        "壹",
        "贰",
        "叁",
        "肆",
        "伍",
        "陆",
        "柒",
        "捌",
        "玖",
      ];
      // 小数部分单位(注意:通常只用到“角”和“分”)
      const cnDecUnits = ["毫", "厘", "分", "角"];
      // 大单位
      const bigUnits = ["", "万", "亿"];
      // 小单位(位值)
      const smallUnits = ["", "拾", "佰", "仟"];

      let chineseInteger = "";
      let chineseDecimal = "";
      let partIndex = 0; // 用于追踪当前处理的是哪一个大单位(万、亿等)
      let partLength = 4; // 每个大单位包含的小单位数量(例如,1万位有4个小单位:个、十、百、千)

      // 处理整数部分
      while (integerPart > 0) {
        let p = "";
        let tempNum = integerPart % Math.pow(10, partLength); // 取出当前大单位下的数值
        integerPart = Math.floor(integerPart / Math.pow(10, partLength)); // 更新剩余未处理的数值

        for (let i = 0; i < partLength && tempNum > 0; i++) {
          const digit = tempNum % 10;
          p = cnNums[digit] + smallUnits[i] + p;
          tempNum = Math.floor(tempNum / 10);
        }

        // 去除末尾无用的零和开头的零
        p = p.replace(/(零.)*零$/, "").replace(/^$/, "零");
        if (p !== "") {
          chineseInteger = p + bigUnits[partIndex] + chineseInteger;
        }
        // 第一个大单位特殊处理:加“元”
        if (partIndex === 0 && chineseInteger !== "") {
          chineseInteger = p + "元";
        }

        partIndex++;
      }

      // 处理小数部分
      if (decimalPartStr) {
        decimalPartStr
          .split("")
          .reverse()
          .forEach((digit, index) => {
            if (digit !== "0") {
              let unitIndex = Math.min(index, cnDecUnits.length - 1); // 确保不会超出单位数组界限
              chineseDecimal =
                cnNums[parseInt(digit)] +
                cnDecUnits[unitIndex] +
                chineseDecimal;
            }
            // 如果小数部分全是0,则不添加任何小数单位(但这里由于反转了,所以会自动处理)
          });

        // 如果小数部分全是0,则不添加小数部分
        if (chineseDecimal === "") {
          chineseDecimal = "整";
        }
      } else {
        chineseDecimal = "整"; // 没有小数部分时,默认添加“整”
      }

      // 返回结果
      return chineseInteger + chineseDecimal;
    },

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值