js加减乘除运算时失去精度问题解决方法

加法:

  1. /**  
  2.      * 加法运算,避免数据相加小数点后产生多位数和计算精度损失。  
  3.      *  
  4.      * @param num1加数1 | num2加数2  
  5.      */  
  6.     function numAdd(num1, num2) {  
  7.         var baseNum, baseNum1, baseNum2;  
  8.         try {  
  9.             baseNum1 = num1.toString().split(".")[1].length;  
  10.         } catch (e) {  
  11.             baseNum1 = 0;  
  12.         }  
  13.         try {  
  14.             baseNum2 = num2.toString().split(".")[1].length;  
  15.         } catch (e) {  
  16.             baseNum2 = 0;  
  17.         }  
  18.         baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));  
  19.         return (num1 * baseNum + num2 * baseNum) / baseNum;  
  20.     };  

减法:

  1. /**  
  2.      * 加法运算,避免数据相加小数点后产生多位数和计算精度损失。  
  3.      *  
  4.      * @param num1加数1 | num2加数2  
  5.      */  
  6.     function numAdd(num1, num2) {  
  7.         var baseNum, baseNum1, baseNum2;  
  8.         try {  
  9.             baseNum1 = num1.toString().split(".")[1].length;  
  10.         } catch (e) {  
  11.             baseNum1 = 0;  
  12.         }  
  13.         try {  
  14.             baseNum2 = num2.toString().split(".")[1].length;  
  15.         } catch (e) {  
  16.             baseNum2 = 0;  
  17.         }  
  18.         baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));  
  19.         return (num1 * baseNum + num2 * baseNum) / baseNum;  
  20.     };  

乘法:

  1. /**  
  2.      * 乘法运算,避免数据相乘小数点后产生多位数和计算精度损失。  
  3.      *  
  4.      * @param num1被乘数 | num2乘数  
  5.      */  
  6.     function numMulti(num1, num2) {  
  7.         var baseNum = 0;  
  8.         try {  
  9.             baseNum += num1.toString().split(".")[1].length;  
  10.         } catch (e) {  
  11.         }  
  12.         try {  
  13.             baseNum += num2.toString().split(".")[1].length;  
  14.         } catch (e) {  
  15.         }  
  16.         return Number(num1.toString().replace("."""))  
  17.                 * Number(num2.toString().replace("."""))  
  18.                 / Math.pow(10, baseNum);  
  19.     };  

除法:

  1. /**  
  2.      * 除法运算,避免数据相除小数点后产生多位数和计算精度损失。  
  3.      *  
  4.      * @param num1被除数 | num2除数  
  5.      */  
  6.     function numDiv(num1, num2) {  
  7.         var baseNum1 = 0, baseNum2 = 0;  
  8.         var baseNum3, baseNum4;  
  9.         try {  
  10.             baseNum1 = num1.toString().split(".")[1].length;  
  11.         } catch (e) {  
  12.             baseNum1 = 0;  
  13.         }  
  14.         try {  
  15.             baseNum2 = num2.toString().split(".")[1].length;  
  16.         } catch (e) {  
  17.             baseNum2 = 0;  
  18.         }  
  19.         with (Math) {  
  20.             baseNum3 = Number(num1.toString().replace("."""));  
  21.             baseNum4 = Number(num2.toString().replace("."""));  
  22.             return (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1);  
  23.         }  
  24.     };  


猜你喜欢

转载自blog.csdn.net/tianguodk/article/details/80346632