欢迎光临,了解微信小程序开发,就上易用通! QQ登录

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

发布:2018-01-25 09:53浏览:来源:网络 编辑:程小序

  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);  
  73.     }  

调用示例

alert(accMul(7.88,0.8));//乘法
alert(accDiv(7.88,0.8).toFixed(2));//除法
alert(accAdd(7.88,0.8));//加法
alert(accSub(7.88,0.8));//减法





免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。

在线客服1:
点击这里给我发消息

在线客服2:
点击这里给我发消息

商务客服:
点击这里给我发消息

服务时间:
9:00-18:00(工作日)