前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0.1+0.2为什么不等于0.3

0.1+0.2为什么不等于0.3

作者头像
用户9914333
发布2022-07-22 14:37:01
8420
发布2022-07-22 14:37:01
举报
文章被收录于专栏:bug收集

面试时,经常会被问到

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次方。去掉小数点即可。

如下图:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 bug收集 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档