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
相关推荐
666HZ6662 分钟前
正则表达式使用示例
javascript·vue.js·正则表达式
睡不着的可乐6 分钟前
面向对象与面向过程、函数式编程
前端·javascript·vue.js
爱分享的程序员11 分钟前
前端面试专栏-工程化:25.项目亮点与技术难点梳理
前端·javascript·面试
ZHENGZJM30 分钟前
使用JS编写动态表格
开发语言·前端·javascript
小彭努力中37 分钟前
153.在 Vue 3 中使用 OpenLayers + Cesium 实现 2D/3D 地图切换效果
前端·javascript·vue.js·3d·ecmascript·echarts
DoraBigHead41 分钟前
原型与原型链 · 千年武学秘籍终解封!
前端·javascript·面试
独立开阀者_FwtCoder2 小时前
2025年每个开发者都必须知道的100多个JavaScript术语(附示例)
前端·javascript·vue.js
3Katrina3 小时前
React大厂面试问答系列之Hooks
前端·javascript·面试
LuckySusu3 小时前
【js篇】JavaScript 中的包装类型详解var、let、const 的区别详解
前端·javascript
Mintopia3 小时前
Three.js 流水效果制作:从像素到波澜的魔法之旅
前端·javascript·three.js