关于JavaScript中浮点数比较的问题
来源:互联网 发布:淘宝网电动车配件 编辑:程序博客网 时间:2024/05/23 12:54
我们在javascript中操作浮点数加减运算判断时经常会遇到这样的问题,比如
0.1+0.2 == 0.3
false
按照我们正常的思维 应该是相等啊,怎么返回的是 false 呢?
这个是因为javascript的进度问题,我们看一下
0.1+0.2
0.30000000000000004
0.1 + 0.2 - 0.3
5.551115123125783e-17
如何解决此问题,在新的ES6中引入了一个 极小的常量 Number.EPSILON,它表示1与大于1的最小浮点数之间的差.
对于64位浮点数来说,大于1的最小浮点数相当于二进制的1.00..001,小数点后面有连续51个零。这个值减去1之后,就等于2的-52次方.
Number.EPSILON === Math.pow(2, -52)
// true
Number.EPSILON
// 2.220446049250313e-16
Number.EPSILON.toFixed(20)
// “0.00000000000000022204”
所以我们在判断比较两个浮点数时,可以通过这个常量来进行判断比较,定义一个最小的进度范围,误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。比如,误差范围设为2的-50次方(即Number.EPSILON * Math.pow(2, 2)),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。
function withinErrorMargin (left, right) { return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);}0.1 + 0.2 === 0.3 // falsewithinErrorMargin(0.1 + 0.2, 0.3) // true1.1 + 1.3 === 2.4 // falsewithinErrorMargin(1.1 + 1.3, 2.4) // true
上面的代码为浮点数运算,部署了一个误差检查函数
阅读全文
0 0
- 关于JavaScript中浮点数比较的问题
- javascript 中浮点数乘法的问题
- 关于浮点数的比较
- 浮点数比较的问题
- 关于浮点数运算的比较大小问题
- 记录关于JavaScript 浮点数运算的精度问题
- PHP中两个float(浮点数)比较的问题[转载]
- 关于浮点数的问题
- JavaScript中浮点数的保留小数位数的问题
- 浮点数比较问题
- 在javascript中解决浮点数加减的问题
- 关于编程中浮点数精度的问题
- C++浮点数的比较问题
- 浮点数的大小比较问题
- 浮点数比较大小的问题
- 浮点数与0的比较问题
- 浮点数比较大小的问题
- C语言中浮点数的比较
- C++标准库中的堆-heap
- js 控制浏览器全屏案例
- 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
- 网络数据工具类
- redis常用命令集合
- 关于JavaScript中浮点数比较的问题
- 7-3 朋友圈(25 分)
- 《scala函数式编程》读书笔记
- httpclient动态代理ip
- HttpURLConnection 和 HttpClient
- k-近邻算法(k-Nearest Neighbor)
- 如何在Canvas上的图形/图像绑定事件监听?
- 没有工业软件 谈什么智能制造转型
- unit6