JavaScript中为什么0.1 + 0.2 !== 0.3?

JavaScript中为什么0.1 + 0.2 !== 0.3?

回答:
在JavaScript中,0.1 + 0.2 === 0.3 的结果是 false,这是因为JavaScript使用IEEE 754标准的双精度浮点数表示数字,这种格式无法精确表示某些十进制小数(如0.1和0.2),导致计算时出现精度丢失。

解析:
计算机底层以二进制存储数字,而像0.1这样的十进制小数在二进制中是无限循环的(类似于1/3在十进制中是0.333...),因此只能近似存储。例如:

console.log(0.1 + 0.2); // 输出:0.30000000000000004

这个微小的误差使得比较结果为 false

解决方案:
在进行浮点数比较时,应使用“误差范围”(即“机器精度”)来判断是否相等,例如:

function isEqual(a, b) {
  return Math.abs(a - b) < Number.EPSILON;
}

console.log(isEqual(0.1 + 0.2, 0.3)); // true

其中 Number.EPSILON 表示JavaScript中可以表示的最小差值,约为 2e-16,适合用于浮点数的安全比较。

总结:
这是所有使用IEEE 754浮点数的语言共有的问题,并非JavaScript的bug。开发者在处理货币计算或高精度需求时,应使用整数运算(如以“分”代替“元”)或引入专门的数学库(如decimal.js)。

发表评论 (审核通过后显示评论):

昵称:
邮箱:
内容: