当前位置:   article > 正文

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

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

小数转为角分

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;  
    }  
  }  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69

输出:一百二十三点四五

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
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65

日常

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

  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;  
    }  
  }  
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

保留三位小数

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;  
    },
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/329344
推荐阅读
相关标签
  

闽ICP备14008679号