zoukankan      html  css  js  c++  java
  • 较大数字转换为中文表示的方法

    在财务或者其他一些特殊的领域,客户可能需要处理一串较长的数字,这个过程中容易产生一些错误,比如 1000000000 这个数字,普通人几乎不可能一眼看出这串数字到底表示多少,但如果写成10亿,就一目了然了。在最近的一个项目中就遇到了这样的问题,我们为用户提供了一 个文本框来输入一笔交易的金额,因为这涉及到关键信息,所以我们不希望用户在填写这一数字的时候出现任何错误或者疏忽,于是我们设计为监听文本框的键盘事 件,并对文本框里的输入进行即时的反馈:

        $('input').keyup(function(){
                var moneyFormat = cnNumFormat($(this).val());
                $('#money_tip').text(moneyFormat.a+"元");
        });
    

    较大数字转换为中文表示的方法

    这样的话,用户在输入数字的时候可以清晰地即时检查自己有没有输入错误。这里我们使用了一个函数 cnNumFormat ,它将较长的数字转化为上图中的易读的形式。这里所说的较长是指4位数以上,即数字大于 10000 则进行处理。这个函数主要借助正则表达式来完成工作,下面是函数的完整代码:

    var cnNumFormat = function(n){
    	if( isNaN(n) ){
    		return false;
    	}
    	if(n < 10000) return n;
    	var core = {
    		tenThousand : function(n){
    			var nFormatArray = n.match(/(\d+)(\d{4}$)/);
    			var balance = this.checkBalance(nFormatArray[2]);
    			var result = nFormatArray[1] + "万" + balance;
    			return result;
    		},
    		hundredMillion : function(n){
    			var nHM = n.match(/^\d+/)[0];
    			var left = n.match(/\D+\d*$/)[0];
    			var leftNum = n.match(/\d*$/)[0];
    			if(nHM.length <= 4){
    				return n
    			}else{
    				var nFormatArray = nHM.match(/(\d+)(\d{4}$)/);
    				var balance = this.checkBalance(nFormatArray[2]);
    				var result = nFormatArray[1] + "亿" + balance;
    				if(!balance.length){
    					if(!leftNum.length){
    						left = left.replace(/万/,'');
    					}else{
    						left = left.replace(/万/,'零');
    					}
    				}
    				return (result + left).replace(/零零/,'零');
    			}
    		},
    		checkBalance : function(n){
    			if (n === "0000") {
    				return "";
    			}
    			else {
    				return n.replace(/^0+/, "零");
    			}
    		},
    		decimal : function(n){
    			if(!n || n === "00"){
    				return '';
    			}
    			n = n.replace(/\./,'');
    			if( new RegExp('^[1-9]0?$').test(n) ){
    				return n.match(/[1-9]/)+"角";
    			}else if( new RegExp('0\\d?').test(n) ){
    				return n.match(/[1-9]/)+"分";
    			}else{
    				return n.slice(0,1)+"角"+n.slice(1,2)+"分"
    			}
    		}
    	}
    	n += "";
    	n = n.match(/(\d+)(\.\d{1,2})?/);
    	var r1 = core.tenThousand(n[1]);
    	var r2 = core.hundredMillion(r1);
    	var r3 = core.decimal(n[2]);
    	return {
    		a:r2,
    		b:r3
    	};
    }
    
    说明:

    1. 参数: 该函数接收一个参数,等待转换的数字。这个数字可以为数值类型也可以是字符串类型,这并不重要。如果该数字小于10000则原样返回,否则进行转换。

    2. 验证: 为了不和你的验证系统做重复的工作,函数内部只做了 isNaN 的验证,验证失败则返回 false

    3. 小数: 如果要进行转换的数字是浮点数,则小数位的前两位转换为“角分”,更多的则会被忽略。

    4. 返回值: 返回值为一个对象,包含 a 和 b 两个属性,它们分别是整数部分的处理结果和小数部分的处理结果(如果有小数部分)。

    转换的例子:
        var r = cnNumFormat(10002.2);
        r.a + "元" + r.b    //1万零2元2角
    
  • 相关阅读:
    跳出IFrame几种方式
    EChart使用简单介绍
    ckplayer视频播放插件使用
    uploadify文件批量上传
    纵表与横表互转实例(转)
    Sublime Text3使用记录
    异步上传,显示进度条
    JS手机浏览器判断(转)
    命令行创建maven模块工程
    eclipse创建maven模块工程
  • 原文地址:https://www.cnblogs.com/myphoebe/p/2226316.html
Copyright © 2011-2022 走看看