0.1 + 0.2 为什么不等于0.3

首先,对于不同的进制数值系统,分母为多少时能除干净?

答案是,以十进制为例,质因子为2、5,因此分母为2、5的倍数都可以被除干净,例如1/2、1/4、1/5、1/8和1/10都可以被除干净,相反,1/3、1/6和1/7结果都是循环小数。

那么二进制时,质因子为2,所以1/2、1/4和1/8都可以被精确表示,1/5或者1/10就变成了循环小数

因此0.1+0.2!=0.3

除不干净即无法被精确表达

可以使用ES6提供的 Number.EPSILON 进行判断 Math.abs(arg1 - arg2) < Number.EPSILON

复制代码
function numberepsilon(arg1,arg2){                   
  return Math.abs(arg1 - arg2) < Number.EPSILON;        
}        

console.log(numberepsilon(0.1 + 0.2, 0.3)); // true
相关推荐
Hilaku3 分钟前
深入WeakMap和WeakSet:管理数据和防止内存泄漏
前端·javascript·性能优化
前端程序猿i18 分钟前
用本地代理 + ZIP 打包 + Excel 命名,优雅批量下载跨域 PDF
前端·javascript·vue.js·html
Danny_FD27 分钟前
Vue2 中使用vue-markdown实现编辑器
前端·javascript·vue.js
用户479492835691529 分钟前
字节面试官:forEach 为什么不能被中断?
前端·javascript
tager34 分钟前
🍪 让你从此告别“Cookie去哪儿了?”
前端·javascript·后端
程序员小续1 小时前
再也不写 Class:React Hooks 完整实战与最佳实践
前端·javascript·react.js
芝士加1 小时前
一个有趣的搜索神器:pinyin-match
前端·javascript·开源
一只大黑洋1 小时前
Clipboard.js 复制内容
前端·javascript·vue.js
然我1 小时前
从 “只会聊天” 到 “能办实事”:OpenAI Function Call 彻底重构 AI 交互逻辑(附完整接入指南)
前端·javascript·人工智能
鹏多多1 小时前
vue混入mixins详解和生命周期影响
前端·javascript·vue.js