vue实时将阿拉伯数字转换成中文大写数字

文章描述了一个Vue.js项目的需求,即在输入阿拉伯数字后实时显示其对应的中文大写数字。为此,定义了一个名为Utils的工具函数,包含numberToChinese方法用于数字转换。在Vue组件的数据和watch中使用这个函数,实现了输入值的实时转换并展示在文本框中,确保了首付款金额的大写形式正确无误。
摘要由CSDN通过智能技术生成

有个项目在写合同时需要实时显示出中文大写数字。现在需求是将阿拉伯数字数字转换成中文的大写数字。

<view class="list">
			<view class="left">首付款(元)</view>
			<view class="right">
				<input type="number" v-model="form.payment_first" placeholder="请输入首付款(元)"  class="inp" />
			</view>		
		</view>
		<view class="list">
			<view class="left">首付款(大写)</view>
			<view class="right">
				<input type="text" v-model="form.payment_first_uppercase" placeholder="请输入首付款(大写)"  class="inp" />
			</view>		
		</view>
		 

转换大写数字工具

var Utils={
    /*
        单位
    */
    units:'个拾佰仟萬@#%億^&~',
    /*
        字符
    */
    chars:'零壹贰叁肆伍陆柒捌玖',
    /*
        数字转中文
        @number {Integer} 形如123的数字
        @return {String} 返回转换成的形如 一百二十三 的字符串
    */
    numberToChinese:function(number){
        var a=(number+'').split(''),s=[],t=this;
        if(a.length>12){
            throw new Error('too big');
        }else{
            for(var i=0,j=a.length-1;i<=j;i++){
                if(j==1||j==5||j==9){//两位数 处理特殊的 1*
                    if(i==0){
                        if(a[i]!='1')s.push(t.chars.charAt(a[i]));
                    }else{
                        s.push(t.chars.charAt(a[i]));
                    }
                }else{
                    s.push(t.chars.charAt(a[i]));
                }
                if(i!=j){
                    s.push(t.units.charAt(j-i));
                }
            }
        }
        //return s;
        return s.join('').replace(/零([十百千万亿@#%^&~])/g,function(m,d,b){//优先处理 零百 零千 等
            b=t.units.indexOf(d);
            if(b!=-1){
                if(d=='亿')return d;
                if(d=='万')return d;
                if(a[j-b]=='0')return '零';
            }
            return '';
        }).replace(/零+/g,'零').replace(/零([万亿])/g,function(m,b){// 零百 零千处理后 可能出现 零零相连的 再处理结尾为零的
            return b;
        }).replace(/亿[万千百]/g,'亿').replace(/[零]$/,'').replace(/[@#%^&~]/g,function(m){
            return {'@':'十','#':'百','%':'千','^':'十','&':'百','~':'千'}[m];
        }).replace(/([亿万])([一-九])/g,function(m,d,b,c){
            c=t.units.indexOf(d);
            if(c!=-1){
                if(a[j-c]=='0')return d+'零'+b;
            }
            return m;
        });
    }
};
export default Utils;

导入方法

import Utils from "@/utils/num-cn.js"

在watch监听对象中的属性,将转换好的内容显示到页面中

ps:因为要监听的是对象,所以需要深度监听


data() {

    return {
        form: {
            payment_first_uppercase:""
        }
    }
},

watch:{
	 "form.payment_first":{
			handler(newval,oldval){
					this.form.payment_first_uppercase=Utils.numberToChinese(newval)
			},
			immediate:true
		}
			 
},

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三线码工

码字不易,有钱打赏,没打钱点赞

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值