如和判断两个浮点数是否相等

在chrome console输入console.log(0.7 + 0.1),你猜会得到什么结果?会输出0.7999999999999999,所以如果你进行这样的判断console.log(0.7 + 0.1 === 0.8),那么结果并不能如愿,会输出 false。

 

为什么会这样呢?引用知乎里面的一段回答:

主要问题是,你用十进制去想,0.7 是一个能准确表示的小数,而二进制却是循环小数。反过来想,就好像在三进制中 0.2 是一个很准确的数字,但在十进制中却是循环小数, 。除非用有理数表示,这些数字不能精确地用有限位的二进制表示,产生误差,0.7+0.1计算的结果也是有误差。把有误差的结果显示时,转换成十进位显示的算法发现该值与 0.8 相比,较接近 0.7999999999999999,所以显示后者。

 

那么怎样评断(0.7 + 0.1)与0.8是否相等呢?

 

我的想法是作差,差值的绝对值与一个很小的数对比(比如1e-7),如果差值小于此数,那么可以认为是相等的。

posted @   WinjayYu  阅读(584)  评论(0编辑  收藏  举报
编辑推荐:
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
阅读排行:
· Blazor Hybrid适配到HarmonyOS系统
· 支付宝 IoT 设备入门宝典(下)设备经营篇
· 万字调研——AI生成内容检测
· 解决跨域问题的这6种方案,真香!
· 一套基于 Material Design 规范实现的 Blazor 和 Razor 通用组件库
点击右上角即可分享
微信分享提示