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
相关推荐
艾小码几秒前
手把手教你实现一个EventEmitter,彻底告别复杂事件管理!
前端·javascript·node.js
Jedi Hongbin3 小时前
Three.js shader内置矩阵注入
前端·javascript·three.js
掘金安东尼3 小时前
Node.js 如何在 2025 年挤压 I/O 性能
前端·javascript·github
得物技术4 小时前
前端日志回捞系统的性能优化实践|得物技术
前端·javascript·性能优化
ZKshun4 小时前
[ 前端JavaScript的事件流机制 ] - 事件捕获、冒泡及委托原理
javascript
薛定谔的算法4 小时前
JavaScript栈的实现与应用:从基础到实战
前端·javascript·算法
魔云连洲4 小时前
React中的合成事件
前端·javascript·react.js
唐•苏凯6 小时前
ArcGIS Pro 遇到严重的应用程序错误而无法启动
开发语言·javascript·ecmascript
萌萌哒草头将军6 小时前
🚀🚀🚀 Oxc 恶意扩展警告;Rolldown 放弃 CJS 支持;Vite 发布两个漏洞补丁版本;Rslib v0.13 支持 ts-go
前端·javascript·vue.js
接着奏乐接着舞。6 小时前
3D地球可视化教程 - 第1篇:基础地球渲染系统
前端·javascript·vue.js·3d·three.js