如上图所示,JavaScript中浮点数计算会有精度问题。
我们该如何解决呢,解决思路就是转化成整数,再计算。
-
首先我们要确定小数位的个数m,知道了m,我们就知道要乘以10的多少次方,该小数才能变成整数。 通过split截取到小数部分,就通过length获取到小数部分的个数, 取两个数中小数位多的那一个。
-
获取结果数我们要保留的小数位的个数n, 获取两个数中小数位个数多的那一个。
// 浮点数计算
export function floatSub(arg1, arg2) {
let r1, r2, m, n;
try {
r1 = arg1.toString().split('.')[1].length;
} catch (error) {
r1 = 0;
}
try {
r2 = arg2.toString().split('.')[1].length;
} catch (error) {
r2 = 0;
}
m = Math.pow(10, Math.max(r1, r2));
n = r1 >= r2 ? r1 : r2; // 即是 Math.max(r1, r2)
return ((arg1 * m - arg2 * m) / m).toFixed(n);
}