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 }