前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端面试 【JavaScript】— 0.1+0.2为什么不等于0.3?如何实现等于0.3?

前端面试 【JavaScript】— 0.1+0.2为什么不等于0.3?如何实现等于0.3?

作者头像
越陌度阡
发布2021-11-16 16:16:54
8500
发布2021-11-16 16:16:54
举报

计算机中用二进制来存储小数,大部分小数转成二进制之后都是无限循环的值,因此存在取舍问题,也就是精度丢失。

如上所述:0.1和0.2在转换成二进制后会无限循环,由于标准位数的限制后面多余的位数会被截掉,此时就已经出现了精度的损失,相加后因浮点数小数位的限制而截断的二进制数字在转换为十进制就会变成 0.30000000000000004。

对于这个问题,一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2^(-52),在ES6中,为我们提供了Number.EPSILON属性,而它的值就是2^(-52),只要我们判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3

代码语言:javascript
复制
function numberEpsilon(a,b){                   
  return Math.abs(a - b) < Number.EPSILON;        
}        

console.log(numberEpsilon(0.1 + 0.2, 0.3)); // true
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

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