1. 程式人生 > >js加減乘除運算時失去精度問題解決方法

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