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

在JavaScript中,0.1 + 0.2 !== 0.3 是由于浮点数精度限制所致。JavaScript采用IEEE 754标准的双精度浮点数表示法,该格式无法精确表示某些十进制小数,导致计算过程中出现精度损失。

计算机底层采用二进制表示方式,而像0.1这样的十进制小数在二进制中是无限循环的(类似于1/3在十进制中是0.333...),因此只能近似存储。这种技术限制导致数值计算中出现微小误差,进而影响比较结果。

具体而言,当执行console.log(0.1 + 0.2)时,实际输出结果为0.30000000000000004,这种微小的误差使得比较结果为false。

为确保浮点数比较的准确性,应采用误差范围(即机器精度)进行判断,例如使用Number.EPSILON作为比较阈值:

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

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

这一现象并非JavaScript的bug,而是所有基于IEEE 754标准的编程语言的共同特性。开发者在处理货币计算或高精度需求时,应使用整数运算(如以"分"代替"元")或引入专门的数学库(如decimal.js)来规避精度问题。

本文章由javascript技术分享原创和收集

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

昵称:
邮箱:
内容: