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
相关推荐
来恩10031 分钟前
EL表达式应用
前端·javascript·vue.js
wh_xia_jun12 分钟前
Vue3 + Vitest 浏览器测试 从零开发指南
前端·javascript·vue.js
唐青枫15 分钟前
别再让 key 写成字符串:TypeScript keyof 从入门到实战
前端·javascript·typescript
天外飞雨道沧桑8 小时前
TypeScript 中 omit 和 record 用法
前端·javascript·typescript
暗冰ཏོ11 小时前
VUE面试题大全
前端·javascript·vue.js·面试
豹哥学前端14 小时前
事件循环(Event Loop)深度解析:让你彻底搞懂 JS 的执行顺序
前端·javascript·面试
竹林81814 小时前
用 wagmi v2 + Next.js 14 搞 NFT 交易市场前端:从合约调用失败到顺利上架,我踩了哪些坑
javascript·next.js
前端不开发14 小时前
用一个 Bookmarklet(书签脚本),给任意网页挂一个可拖拽悬浮窗
前端·javascript
接着奏乐接着舞15 小时前
【无标题】
开发语言·前端·javascript
雨雨雨雨雨别下啦15 小时前
心理健康AI助手 - 项目总结
前端·javascript·vue.js·人工智能·信息可视化