Skip to content

0.1+0.2 不等于 0.3 原因及解决方法

原因:0.1 和 0.2 都转化成二进制后再进行运算如下

js
// 0.1 和 0.2 都转化成二进制后再进行运算
0.00011001100110011001100110011001100110011001100110011010 +
0.0011001100110011001100110011001100110011001100110011010 =
0.0100110011001100110011001100110011001100110011001100111

// 转成十进制正好是 0.30000000000000004

解决方法:parseFloat 和 toFixed 结合

  • parseFloat((0.1+0.2)).toFixed(1) === 0.3
  • 使用 Number.EPSILON,Number.EPSILON 等于 2 的-52 次方
js
/**
 * @description 比较两个值是否相等
 * @param {Number} a
 * @param {Number} b
 * @return 相差小于某个值,返回true,否则返回false
 */
function numberEqual(a, b) {
  return Math.abs(a - b) < Number.EPSILON
}

numberEqual(0.1 + 0.2, 0.3) // true