js计算浮点数的过程中会出现一些奇怪的事,如
// 加法函数
function add(a, b) {
var c, d, e;
try {
c = a.toString().split(".")[1].length;
} catch (f) {
c = 0;
}
try {
d = b.toString().split(".")[1].length;
} catch (f) {
d = 0;
}
return e = Math.pow(10, Math.max(c, d)), (mul(a, e) + mul(b, e)) / e;
}
// 减法函数,用来得到精确的减法结果 {javascript的减法结果会有误差,在两个浮点数相减的时候会比较明显}
SubFn (arg1, arg2) {
var r1, r2, m, n
try { r1 = arg1.toString().split('.')[1].length } catch (e) { r1 = 0 }
try { r2 = arg2.toString().split('.')[1].length } catch (e) { r2 = 0 }
m = Math.pow(10, Math.max(r1, r2))
n = (r1 >= r2) ? r1 : r2
return ((arg1 * m - arg2 * m) / m).toFixed(n)
},
// 乘法函数
MulFn(a, b) {
var c = 0,
d = a.toString(),
e = b.toString();
try {
c += d.split('.')[1].length;
} catch (f) {
// 后续操作
}
try {
c += e.split('.')[1].length;
} catch (f) {
// 后续操作
}
return Number(d.replace('.', '')) * Number(e.replace('.', '')) / Math.pow(10, c);
}
// 除法函数
function div(a, b) {
var c, d, e = 0,
f = 0;
try {
e = a.toString().split(".")[1].length;
} catch (g) {}
try {
f = b.toString().split(".")[1].length;
} catch (g) {}
return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), mul(c / d, Math.pow(10, f - e));
}