js 自定义加减乘除方法(防止js自身计算错误)

  1. /** 
  2.  * 乘法 
  3.  * @param arg1 
  4.  * @param arg2 
  5.  * @returns {Number} 
  6.  */  
  7. function accMul(arg1, arg2) {  
  8.     var m = 0, s1 = arg1.toString(), s2 = arg2.toString();  
  9.     try { m += s1.split(".")[1].length } catch (e) { }  
  10.     try { m += s2.split(".")[1].length } catch (e) { }  
  11.     return Number(s1.replace(".""")) * Number(s2.replace(".""")) / Math.pow(10, m)  
  12. }  
  13. /** 
  14.  * 除法 
  15.  * @param arg1 
  16.  * @param arg2 
  17.  * @returns {Number} 
  18.  */  
  19. function accDiv(arg1, arg2) {  
  20.     var t1 = 0, t2 = 0, r1, r2;  
  21.     try { t1 = arg1.toString().split(".")[1].length } catch (e) { }  
  22.     try { t2 = arg2.toString().split(".")[1].length } catch (e) { }  
  23.     with (Math) {  
  24.         r1 = Number(arg1.toString().replace("."""))  
  25.         r2 = Number(arg2.toString().replace("."""))  
  26.         return (r1 / r2) * pow(10, t2 - t1);  
  27.     }  
  28. }  
  29. /** 
  30.  * 加法 
  31.  * @param arg1 
  32.  * @param arg2 
  33.  * @returns {Number} 
  34.  */  
  35. function accAdd(arg1, arg2) {  
  36.     var r1, r2, m, c;  
  37.     try { r1 = arg1.toString().split(".")[1].length } catch (e) { r1 = 0 }  
  38.     try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 }  
  39.     c = Math.abs(r1 - r2);  
  40.     m = Math.pow(10, Math.max(r1, r2))  
  41.     if (c > 0) {  
  42.         var cm = Math.pow(10, c);  
  43.         if (r1 > r2) {  
  44.             arg1 = Number(arg1.toString().replace("."""));  
  45.             arg2 = Number(arg2.toString().replace(".""")) * cm;  
  46.         }  
  47.         else {  
  48.             arg1 = Number(arg1.toString().replace(".""")) * cm;  
  49.             arg2 = Number(arg2.toString().replace("."""));  
  50.         }  
  51.     }  
  52.     else {  
  53.         arg1 = Number(arg1.toString().replace("."""));  
  54.         arg2 = Number(arg2.toString().replace("."""));  
  55.     }  
  56.     return (arg1 + arg2) / m  
  57. }  
  58. /** 
  59.  * 减法 
  60.  * @param arg1 
  61.  * @param arg2 
  62.  * @returns 
  63.  */  
  64. function accSub(arg1,arg2){  
  65.     var r1,r2,m,n;  
  66.     try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}  
  67.     try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}  
  68.     m=Math.pow(10,Math.max(r1,r2));  
  69.     //last modify by deeka  
  70.     //动态控制精度长度  
  71.     n=(r1>=r2)?r1:r2;  
  72.     return ((arg1*m-arg2*m)/m).toFixed(n);  

  1.     }  

原文地址:http://blog.csdn.net/u011072139/article/details/54095210

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值