浮点数计算精度问题

200 阅读1分钟

企业微信截图_16607215799483.png

如上图所示,JavaScript中浮点数计算会有精度问题。

我们该如何解决呢,解决思路就是转化成整数,再计算。

  1. 首先我们要确定小数位的个数m,知道了m,我们就知道要乘以10的多少次方,该小数才能变成整数。 通过split截取到小数部分,就通过length获取到小数部分的个数, 取两个数中小数位多的那一个。

  2. 获取结果数我们要保留的小数位的个数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);
}