js的算术运算

做js经常要进行一些数学运算,里面的一些的函数能带来一些方便

    1.加法:

function accAdd(arg1, arg2) {  
	var r1, r2, m;  
	try {  
	    r1 = arg1.toString().split(".")[1].length;  
	}  
	catch (e) {  
	    r1 = 0;  
	}  
	try {  
	    r2 = arg2.toString().split(".")[1].length;  
	}  
	catch (e) {  
	    r2 = 0;  
	}  
	m = Math.pow(10, Math.max(r1, r2));  
	return (arg1 * m + arg2 * m) / m;  
}
   2.减法:

function subtr(arg1,arg2){ 

    var r1,r2,m,n;  
    try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}  
    try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}  
    m=Math.pow(10,Math.max(r1,r2));  
    //last modify by deeka  
    //动态控制精度长度  
    n=(r1>=r2)?r1:r2;  
    return ((arg1*m-arg2*m)/m).toFixed(2);  
}
3.乘法

/**
 ** 乘法函数,用来得到精确的乘法结果
 ** 说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
 ** 调用:accMul(arg1,arg2)
 ** 返回值:arg1乘以 arg2的精确结果
 **/
function accMul(arg1, arg2) {
    var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
    try {
        m += s1.split(".")[1].length;
    }
    catch (e) {
    }
    try {
        m += s2.split(".")[1].length;
    }
    catch (e) {
    }
    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
}
4.除法

/** 
 ** 除法函数,用来得到精确的除法结果
 ** 说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
 ** 调用:accDiv(arg1,arg2)
 ** 返回值:arg1除以arg2的精确结果
 **/
function accDiv(arg1, arg2) {
    var t1 = 0, t2 = 0, r1, r2;
    try {
        t1 = arg1.toString().split(".")[1].length;
    }
    catch (e) {
    }
    try {
        t2 = arg2.toString().split(".")[1].length;
    }
    catch (e) {
    }
    with (Math) {
        r1 = Number(arg1.toString().replace(".", ""));
        r2 = Number(arg2.toString().replace(".", ""));
        return (r1 / r2) * pow(10, t2 - t1);
    }
}
5.把数字转换为中文大写

function DX(n) {
    if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n))
        return "数据非法";
    var unit = "千百拾亿千百拾万千百拾元角分", str = "";
        n += "00";
    var p = n.indexOf('.');
    if (p >= 0)
        n = n.substring(0, p) + n.substr(p+1, 2);
        unit = unit.substr(unit.length - n.length);
    for (var i=0; i < n.length; i++)
        str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
    return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
}

6.格式化数字的小数点位数

function fnumber(s,fixed) {
	if(s){
		if(s==""){
			return 0.00;
		}
		s = $.trim(s);
		for(var i = 0; i < s.length; i++) {
			s = s.replace(",", "");
			if(s.indexOf(",") < 0) {
				break;
			}
		}
		if(fixed)
			return parseFloat(s).toFixed(fixed);
		else
			return parseFloat(s);
	}
}


7.给数字加上千分位

//格式化数字为2位小数金额,逗号隔开
function fmoney(s) { 

   var str = parseFloat((s + "").replace(/[^\d\.-]/g, "")) + "";   
   var l = str.split(".")[0].split("").reverse();
   var r = str.split(".")[1];
   var r_num = 0;

   var flag = false;
   if(r != undefined && r.length >= 3 && parseFloat(r.charAt(2)) >= 5) {
	   flag = true;
   }

   if(r != undefined && r.length >= 3) {
	   r = r.substring(0,2);
   }
   if(flag) {
	   var temp = "0." + r;
	   temp = (parseFloat(temp) + 0.01) + "";
	   if(temp.length < 5){
		   r = temp.substring(2);
	   } else {
		   r = temp.substring(2,4);
	   }
	   
   }
   if(r == undefined) {
	   r = "00";
   }
   if(r.length == 1) {
	   r = r + "0";
   }
   t = "";   
   for(i = 0; i < l.length; i ++ )   
   {   
      t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");   
   } 
   var money = t.split("").reverse().join("") + "." + r; 
   if(money.charAt(0) == "-" && money.charAt(1) == ",") {
	   money = money.replace(",","");	
   }
   return money=="0.00"?"0":money;  
} 







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值