数字转换中文大写

数字转换中文大写

<template>
  <div>
    <el-input v-model="input" placeholder="请输入内容" @input="inputTit"></el-input>

    <span>{{ bigNum }}</span>
  </div>
</template>

<script>
  export default {
    name: 'BigNum',
    data() {
      return {
        input: '',
        bigNum: ''
      }
    },
    mounted() {},
    methods: {
      inputTit(val) {
        if (!val) {
          this.bigNum = ''
          return
        }
        // 常量: 
        var MAXIMUM_NUMBER = 99999999999.99;
        // 预定义输出的基数字符和货币符号: 
        var CN_ZERO = '零'
        var CN_ONE = '壹'
        var CN_TWO = '贰'
        var CN_THREE = '叁'
        var CN_FOUR = '肆'
        var CN_FIVE = '伍'
        var CN_SIX = '陆'
        var CN_SEVEN = '柒'
        var CN_EIGHT = '捌'
        var CN_NINE = '玖'
        var CN_TEN = '拾'
        var CN_HUNDRED = '佰'
        var CN_THOUSAND = '仟'
        var CN_TEN_THOUSAND = '万'
        var CN_HUNDRED_MILLION = '亿'
        var CN_SYMBOL = '人民币'
        var CN_DOLLAR = '元'
        var CN_TEN_CENT = '角'
        var CN_CENT = '分'
        var CN_INTEGER = '整'

        // 变量: 
        var integral    // 表示数字的整数部分. 
        var decimal    // 表示数字的小数部分. 
        var outputCharacters    // 输出结果. 
        var parts
        var digits, radices, bigRadices, decimals
        var zeroCount
        var i, p, d
        var quotient, modulus

        // 验证输入字符串: 
        val = val.toString()
        if (val == '') {
          return ''
        }
        if (val.match(/[^,.\d]/) != null) {
          return ''
        }
        if ((val).match(/^((\d{1,3}(,\d{3})*(.((\d{3},)*\d{1,3}))?)|(\d+(.\d+)?))$/) == null) {
          return ''
        }

        // 规范化输入数字的格式: 
        val = val.replace(/,/g, '')    // 删除逗号分隔符. 
        val = val.replace(/^0+/, '')    // 在开始处修剪零. 
        // 断言数字不大于最大值. 
        if (Number(val) > MAXIMUM_NUMBER) {
          return ''
        }

        // 处理货币数字到字符的转换: 
        // 在处理转换之前,分离整数和小数部分: 
        parts = val.split('.')
        if (parts.length > 1) {
          integral = parts[0]
          decimal = parts[1]
          // 减少第二个后面多余的十进制数字. 
          decimal = decimal.substr(0, 2)
        }
        else {
          integral = parts[0]
          decimal = ''
        }
        // 准备与数字对应的字符: 
        digits = new Array(CN_ZERO, CN_ONE, CN_TWO, CN_THREE, CN_FOUR, CN_FIVE, CN_SIX, CN_SEVEN, CN_EIGHT, CN_NINE)
        radices = new Array('', CN_TEN, CN_HUNDRED, CN_THOUSAND)
        bigRadices = new Array('', CN_TEN_THOUSAND, CN_HUNDRED_MILLION)
        decimals = new Array(CN_TEN_CENT, CN_CENT)
        // 开始处理: 
        outputCharacters = ''
        // 大于0的过程积分部分: 
        if (Number(integral) > 0) {
          zeroCount = 0
          for (i = 0; i < integral.length; i++) {
            p = integral.length - i - 1
            d = integral.substr(i, 1)
            quotient = p / 4
            modulus = p % 4
            if (d == '0') {
              zeroCount++
            }
            else {
              if (zeroCount > 0) {
                outputCharacters += digits[0]
              }
              zeroCount = 0
              outputCharacters += digits[Number(d)] + radices[modulus]
            }
            if (modulus == 0 && zeroCount < 4) {
              outputCharacters += bigRadices[quotient]
              zeroCount = 0
            }
          }
          outputCharacters += CN_DOLLAR
        }
        // 处理小数部分(如果有): 
        if (decimal != '') {
          for (i = 0; i < decimal.length; i++) {
            d = decimal.substr(i, 1)
            if (d != '0') {
              outputCharacters += digits[Number(d)] + decimals[i]
            }
          }
        }
        // 确认并返回最终输出字符串: 
        if (outputCharacters == '') {
          outputCharacters = CN_ZERO + CN_DOLLAR
        }
        if (decimal == '') {
          outputCharacters += CN_INTEGER
        }
        outputCharacters = CN_SYMBOL + outputCharacters
        this.bigNum = outputCharacters
        return this.bigNum
      }
    }
  }
</script>

本文参考某位博主但是忘记原文地址了,如有发现请私信本人删除或添加原文地址

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值