1. 程式人生 > 實用技巧 >js計算精度

js計算精度

 1 /**
 2  * 解決兩個數相加精度丟失問題
 3  * @param a
 4  * @param b
 5  * @returns {Number}
 6  */
 7 function floatAdd(a, b) {
 8     var c, d, e;
 9     if(undefined==a||null==a||""==a||isNaN(a)){a=0;}
10     if(undefined==b||null==b||""==b||isNaN(b)){b=0;}
11     try {
12         c = a.toString().split(".")[1].length;
13 } catch (f) { 14 c = 0; 15 } 16 try { 17 d = b.toString().split(".")[1].length; 18 } catch (f) { 19 d = 0; 20 } 21 e = Math.pow(10, Math.max(c, d)); 22 return (floatMul(a, e) + floatMul(b, e)) / e; 23 } 24 /** 25 * 解決兩個數相減精度丟失問題 26 * @param a 27 * @param b
28 * @returns {Number} 29 */ 30 function floatSub(a, b) { 31 var c, d, e; 32 if(undefined==a||null==a||""==a||isNaN(a)){a=0;} 33 if(undefined==b||null==b||""==b||isNaN(b)){b=0;} 34 try { 35 c = a.toString().split(".")[1].length; 36 } catch (f) { 37 c = 0; 38 } 39
try { 40 d = b.toString().split(".")[1].length; 41 } catch (f) { 42 d = 0; 43 } 44 e = Math.pow(10, Math.max(c, d)); 45 return (floatMul(a, e) - floatMul(b, e)) / e; 46 } 47 /** 48 * 解決兩個數相乘精度丟失問題 49 * @param a 50 * @param b 51 * @returns {Number} 52 */ 53 function floatMul(a, b) { 54 var c = 0, 55 d = a.toString(), 56 e = b.toString(); 57 try { 58 c += d.split(".")[1].length; 59 } catch (f) {} 60 try { 61 c += e.split(".")[1].length; 62 } catch (f) {} 63 return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c); 64 } 65 /** 66 * 解決兩個數相除精度丟失問題 67 * @param a 68 * @param b 69 * @returns 70 */ 71 function floatDiv(a, b) { 72 var c, d, e = 0, 73 f = 0; 74 try { 75 e = a.toString().split(".")[1].length; 76 } catch (g) {} 77 try { 78 f = b.toString().split(".")[1].length; 79 } catch (g) {} 80 return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), floatMul(c / d, Math.pow(10, f - e)); 81 }