卓象程序员 | 哈尔滨IT培训 | 品质教育,口碑传承 | 为做出口口相传,好口碑的教育品牌而奋斗!

卓象程序员让每一位学员高薪就业 联系我们13101507057

加微信,了解详情
您所在的位置:首页 > 文章 >卓象技术

「卓象程序员」0.1 + 0.2在什么情况下不等于0.3?
时间: 2019-10-10 16:57:52     来源: 卓象IT实训基地【原创】

这是一个很有意思的问题。曾经有一个笑话说1+1在什么情况下不等于2,那么如今有0.1+0.2到底等不等于0.3的问题。这个问题如果在正常的数学逻辑思维里,小朋友都知道答案是确实等于0.3.但是在Javascript里,0.1 + 0.2 != 0.3.那么这到底是什么原因呢?很多公司在面试前端程序员的时候也非常喜欢问这个问题。那么我们就来一起探究下原因吧。


其实,问题在于Javascript中的二进制浮点数0.1+0.2是约数,并不精准。它们相加的结果是一个比较接近0.3的数,0.30000000000000004,程序是十分严谨的,所以判断结果为false。


Javascript的数学运算都是基于 IEEE754 标准的浮点数运算,比如2+0.1也是浮点数2+浮点数0.1。所以原因在于浮点0.1取一舍零造成的误差。


那么问题出现了,我们应该如何去解决呢?我们可以设置一个误差范围,在Javascript中这个值是2^~52,在ES6中我们可以使用属性:Number.EPSILON,这个值就等于2^~52。所以我们只需要满足(0.1+0.2)-0.3小于Number.EPSILON这个条件,那么0.1 + 0.2 === 0.3 就为true了。


但是还不够严谨,我们还应该考虑兼容性的问题,那么在Chrome中是支持这个属性的,但是在IE中并不支持。


最后我们也不用担心数字无法完全精确,只是在处理小数时应该特别引起注意。绝大多数程序只需要处理整数就可以了,所以使用Javascript是完全没问题的。

每日分享技术干货~

报名卓象免费训练营课程

学习最新热门IT技术

找一份自己满意的高薪工作

15天免费学习!!

卓象程序员

★ 零基础,随时体验

★ 免费试听,满意后再报名

★ 小班授课,学习氛围浓厚

★ 口碑相传,80%学员来自口碑推荐

★ 教学严管,闯关式学习保障学习效果

★ 公司地点,哈尔滨市东直路123号7楼