vue中数字转汉字,带小数转化

发布于:2024-03-28 ⋅ 阅读:(31) ⋅ 点赞:(0)

小数转为角分

export default {  
  methods: {  
    numberToChinese(num) {  
      if (typeof num !== 'number' || isNaN(num)) {  
        return '输入的不是一个有效的数字';  
      }  
  
      const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];  
      const units = ['', '十', '百', '千'];  
      const bigUnits = ['', '万', '亿', '兆'];  
      const decimalUnits = ['角', '分']; // 小数部分的单位  
  
      // 处理整数部分  
      let integerPart = Math.floor(num); // 整数部分  
      let decimalPart = num - integerPart; // 小数部分  
      let str = '';  
      let zeroFlag = false;  
      let unitIndex = 0;  
      let bigUnitIndex = 0;  
  
      while (integerPart > 0) {  
        const digit = integerPart % 10;  
        if (digit === 0) {  
          if (!zeroFlag) {  
            str = chineseNums[digit] + str;  
            zeroFlag = true;  
          }  
        } else {  
          str = chineseNums[digit] + units[unitIndex] + str;  
          zeroFlag = false;  
        }  
        integerPart = Math.floor(integerPart / 10);  
        unitIndex++;  
        if (unitIndex === units.length && integerPart > 0) {  
          unitIndex = 0;  
          bigUnitIndex++;  
          if (bigUnitIndex < bigUnits.length) {  
            str = bigUnits[bigUnitIndex] + str;  
          }  
        }  
      }  
  
      // 处理小数部分  
      if (decimalPart > 0) {  
        str += '点'; // 添加“点”作为小数点的中文表示  
        decimalPart *= 100; // 转换为百分位  
        let decimalStr = '';  
        for (let i = 0; i < decimalUnits.length; i++) {  
          const digit = Math.floor(decimalPart % 10);  
          if (digit !== 0) {  
            decimalStr = chineseNums[digit] + decimalUnits[i] + decimalStr;  
          }  
          decimalPart = Math.floor(decimalPart / 10);  
          if (decimalPart === 0) {  
            break;  
          }  
        }  
        str += decimalStr;  
      }  
  
      // 如果整个数字为0,则直接返回“零”  
      if (str === '') {  
        return '零';  
      }  
  
      return str;  
    }  
  }  
}

输出:一百二十三点四五

在Vue中将带有小数的数字转化为中文,但小数部分不带单位(例如:不转换为“角”、“分”等),我们可以仅将小数部分作为普通数字处理,不进行单位转换

export default {  
  methods: {  
    numberToChinese(num) {  
      if (typeof num !== 'number' || isNaN(num)) {  
        return '输入的不是一个有效的数字';  
      }  
  
      const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];  
      const units = ['', '十', '百', '千'];  
      const bigUnits = ['', '万', '亿', '兆'];  
  
      // 处理整数部分  
      let integerPart = Math.trunc(num); // 整数部分  
      let decimalPart = num - integerPart; // 小数部分  
      let str = '';  
      let zeroFlag = false;  
      let unitIndex = 0;  
      let bigUnitIndex = 0;  
  
      while (integerPart > 0) {  
        const digit = integerPart % 10;  
        if (digit === 0) {  
          if (!zeroFlag) {  
            str = chineseNums[digit] + str;  
            zeroFlag = true;  
          }  
        } else {  
          str = chineseNums[digit] + units[unitIndex] + str;  
          zeroFlag = false;  
        }  
        integerPart = Math.trunc(integerPart / 10);  
        unitIndex++;  
        if (unitIndex === units.length && integerPart > 0) {  
          unitIndex = 0;  
          bigUnitIndex++;  
          str = bigUnits[bigUnitIndex] + str;  
        }  
      }  
  
      // 处理小数部分  
      if (decimalPart > 0) {  
        str += '点'; // 添加“点”作为小数点的中文表示  
        decimalPart *= 100; // 假设处理到小数点后两位  
        let decimalStr = '';  
        let decimalUnitIndex = 0;  
        while (decimalPart > 0 && decimalUnitIndex < 2) { // 假设只处理到小数点后两位  
          const digit = Math.trunc(decimalPart % 10);  
          if (digit !== 0) {  
            decimalStr = chineseNums[digit] + decimalStr;  
          }  
          decimalPart = Math.trunc(decimalPart / 10);  
          decimalUnitIndex++;  
        }  
        str += decimalStr;  
      }  
  
      // 如果整个数字为0,则直接返回“零”  
      if (str === '') {  
        return '零';  
      }  
  
      return str;  
    }  
  }  
}

日常

提示:当前创作和你的工作、学习是什么样的关系
例如:

  1. 创作是否已经是你生活的一部分了
  2. 有限的精力下,如何平衡创作和工作学习

0-9999的转化

在Vue中,你可以创建一个方法来将数字转换为中文表示。这通常涉及到对数字的每个位进行遍历,并根据位数将其转换为对应的中文表示。

以下是一个简单的例子,将0-9999之间的数字转换为中文

export default {  
  methods: {  
    numberToChinese(num) {  
      const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];  
      const units = ['', '十', '百', '千'];  
  
      if (num === 0) return chineseNums[0];  
  
      let str = '';  
      let zeroFlag = false; // 用于标记是否出现过0  
  
      for (let i = 0; i < 4; i++) {  
        const digit = Math.floor((num / Math.pow(10, i)) % 10;  
        if (digit === 0) {  
          if (!zeroFlag) {  
            str = chineseNums[digit] + str;  
            zeroFlag = true;  
          }  
        } else {  
          str = chineseNums[digit] + units[i] + str;  
          zeroFlag = false;  
        }  
      }  
  
      return str;  
    }  
  }  
}

保留三位小数

28.155 输出:二十八点一五五

numberToChinese(num) {  
      if (typeof num !== 'number' || isNaN(num)) {  
        return '输入的不是一个有效的数字';  
      }  
  
      const chineseNums = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];  
      const units = ['', '十', '百', '千'];  
      const bigUnits = ['', '万', '亿', '兆'];  
  
      // 处理整数部分  
      let integerPart = Math.trunc(num);  
      let decimalPart = (num - integerPart).toFixed(3).slice(2); // 保留三位小数,并去掉整数部分  
  
      let str = '';  
      let zeroFlag = false;  
      let unitIndex = 0;  
      let bigUnitIndex = 0;  
  
      while (integerPart > 0) {  
        const digit = integerPart % 10;  
        if (digit === 0) {  
          if (!zeroFlag) {  
            str = chineseNums[digit] + str;  
            zeroFlag = true;  
          }  
        } else {  
          str = chineseNums[digit] + units[unitIndex] + str;  
          zeroFlag = false;  
        }  
        integerPart = Math.trunc(integerPart / 10);  
        unitIndex++;  
        if (unitIndex === units.length && integerPart > 0) {  
          unitIndex = 0;  
          bigUnitIndex++;  
          str = bigUnits[bigUnitIndex] + str;  
        }  
      }  
  
      // 处理小数部分  
      if (decimalPart !== '000') {  
        str += '点'; // 添加“点”作为小数点的中文表示  
        for (let i = 0; i < decimalPart.length; i++) {  
          const digit = parseInt(decimalPart[i]);  
          if (digit !== 0) {  
            str += chineseNums[digit];  
          }  
        }  
      }  
  
      // 如果整个数字为0,则直接返回“零”  
      if (str === '') {  
        return '零';  
      }  
  
      return str;  
    },
本文含有隐藏内容,请 开通VIP 后查看