JS中 0.1 + 0.2 为什么 !== 0.3
发布时间:2025-05-24 21:51:10 发布人:远客网络
一、JS中 0.1 + 0.2 为什么 !== 0.3
1、计算计处理浮点数的都会存在精准度的问题,这不是浏览器也不是js独有的,这是计算机的问题
2、浮点数以二进制存到计算机的时候,可能会出现无限循环的值,计算机最多只能截取64位(32位的电脑截取34位),本身就不是准确的,所以加了运算之后结果也不是准确的,而浏览器呢又会裁掉一部分,所以会出现浮点数运算的时候精准度丢失问题
3、但是项目中总会遇到浮点数运算,怎么保证精准度呢?
4、最简单的方法,四舍五入,只保留小数点后两位
二、前端每日一问:0.1 + 0.2 === 0.3
答案是否定的。在尝试将0.1和0.2相加时,我们得到的结果并非0.3。原因在于浮点数在二进制表示中可能无法精确表示,导致计算时产生微小误差。具体来说,0.1和0.2的总和实际上是接近0.3的值,但不完全相等。
为解决浮点数计算精度问题,可以将浮点数转换为整数进行计算,然后除以相应的数量级。此外,可以使用JavaScript中的精度计算库,例如decimal.js或big.js等工具来避免精度误差。
每日一问,助力前端面试。如果你对此有疑问,欢迎在评论区互动。我们期待你的参与和讨论,共同提高技术水平。
三、0.1+0.2为什么不等于0.3
原因在于在JS中采用的IEEE 754的双精度标准,计算机内部存储数据的编码的时候,0.1在计算机内部根本就不是精确的0.1,而是一个有舍入误差的0.1。当代码被编译或解释后,0.1已经被四舍五入成一个与之很接近的计算机内部数字,以至于计算还没开始,一个很小的舍入错误就已经产生了。这也就是 0.1+ 0.2不等于0.3的原因。
另外要注意,不是所有浮点数都有舍入误差。二进制能精确地表示位数有限且分母是2的倍数的小数,比如0.5,0.5在计算机内部就没有舍入误差。所以0.5+ 0.5=== 1
有时两个近似值进行计算的时候,得到的值是在JS的近似范围内的,于是就可以得到正确答案。至于哪些值计算后能得到正确结果,哪些不能,我们也不需要去记。
最好的方法就是我们想办法规避掉这类小数计算时的精度问题就好了,那么最常用的方法就是将浮点数转化成整数计算。因为整数都是可以精确表示的。
通常的解决办法就是把计算数字提升 10的N次方倍再除以 10的N次方。一般都用 1000就行了