JS精确计算数值方法

原创
2016/12/30 08:08
阅读数 5K

1、加法

         /**
           * 精确计算两数的和
           * @method additive
           * @param {Number} v1 有效数值1
           * @param {Number} v2 有效数值2
           * @return {Number} 两数值的和
           */
          function additive(v1,v2){ 
              var n1,n2,m;
              //获取两数的浮点位数
             try{n1=v1.toString().split(".")[1].length;}catch(e){n1=0} 
             try{n2=v2.toString().split(".")[1].length;}catch(e){n2=0} 
             //获取10为底数,最大两位数值的浮点位数次幂
             m=Math.pow(10,Math.max(n1,n2));
             return (v1*m+v2*m)/m; 
         } 

 

2、减法     

        /**
           * 精确计算两数的差
           * @method subtraction
           * @param {Number} v1 有效数值1 
           * @param {Number} v2 有效数值2 
           * @return {Number} v1-v2两数值的差
           */
           function subtraction(v1,v2){
              var n1,n2,m,n;
              //获取两数的浮点位数
              try{n1=v1.toString().split(".")[1].length}catch(e){n1=0}
              try{n2=v2.toString().split(".")[1].length}catch(e){n2=0}
               //获取10为底数,数值的最大浮点位数次幂
              m=Math.pow(10,Math.max(n1,n2));
              //获取数值的最大浮点位数,设置为返回值的精度长度
              n=Math.max(n1,n2);
              //toFixed格式化数值位数
              return ((v1*m-v2*m)/m).toFixed(n);
           } 

3、除法

         /**
           * 精确计算两数的商
           * @method division
           * @param {Number} v1 有效数值1  被除数
           * @param {Number} v2 有效数值2  除数
           * @return {Number} 两数值的商
           */
          function division(v1,v2){ 
                var t1=0,t2=0,n1,n2; 
                var s1=v1.toString();
                var s2=v2.toString();
                //获取两数的浮点位数
                try{t1=s1.split(".")[1].length}catch(e){} 
                try{t2=s2.split(".")[1].length}catch(e){}
                //去除小数点符号,获取整数
                n1=Number(s1.replace(".","")) 
                n2=Number(s2.replace(".","")) 
                //两整数相除,乘以10为底数的(除数浮点位数-被除数的浮点位数)
                return (n1/n2)*pow(10,t2-t1); 
         } 

4、乘法

        /**
           * 精确计算两数的积
           * @method subtraction
           * @param {Number} v1 有效数值1 
           * @param {Number} v2 有效数值2 
           * @return {Number} 两数值的乘积
           */
          function multiplication(v1,v2) { 
                var m=0;
                s1=v1.toString();
                s2=v2.toString(); 
                //获取两数的浮点位数
                try{m+=s1.split(".")[1].length}catch(e){} 
                try{m+=s2.split(".")[1].length}catch(e){} 
                //去除小数点的两数相乘,除以(10为底数,两值浮点位数的次幂)
                return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m); 
         } 

 

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部