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 }