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
相关推荐
竹林8181 小时前
Web3表单签名验证:我用 wagmi 和 ethers 给 DApp 加了一个“免密登录”,踩坑记录全在这了
javascript
用户6990304848751 小时前
try catch使用场景 处理同步代码错误兼容用的
javascript·uni-app
雪碧聊技术1 小时前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
VidDown2 小时前
VidDown 工具站:免费、本地优先的开发者工具箱
javascript·编辑器·音视频·视频编解码·视频
触底反弹3 小时前
🚀 手把手用 HTML5 Canvas 从零打造飞机大战游戏,代码全开源!
前端·javascript·canvas
DJ斯特拉3 小时前
axios快速使用
开发语言·前端·javascript
智通3 小时前
可取消的异步任务与 AbortController
javascript
Hilaku4 小时前
AI 写代码越快,为什么 Code Review 越不能省?
前端·javascript·程序员
HjhIron5 小时前
CSS 3D 世界:从盒子模型到三维空间动画
javascript·css
VidDown5 小时前
显卡处理视频技术详解:从硬解码到 NVENC,GPU 如何让视频处理起飞?
javascript·编辑器·音视频·视频编解码·视频