正确的比较浮点数的方法?

根据双精度浮点数的定义,Number 类型中有效的整数范围是 -0x1fffffffffffff 至 0x1fffffffffffff,所以 Number 无法精确表示此范围外的整数。

同样根据浮点数的定义,非整数的 Number 类型无法用 ==(=== 也不行) 来比较,一段著名的代码,为什么在 JavaScript 中,0.1+0.2 不能 =0.3:

  console.log( 0.1 + 0.2 == 0.3);

  这里输出的结果是 false,说明两边不相等的,这是浮点运算的特点,也是疑惑的来源,浮点数运算的精度问题导致等式左右的结果并不是严格相等,而是相差了个微小的值。所以实际上,这里错误的不是结论,而是比较的方法,正确的比较方法是使用 JavaScript 提供的最小精度值:

  console.log( Math.abs(0.1 + 0.2 - 0.3) <= Number.EPSILON);

  检查等式左右两边差的绝对值是否小于最小精度,才是正确的比较浮点数的方法。这段代码结果就是 true 了。

 

 每一个努力的人都值得被肯定,但是最大的肯定来源于自己!!!

     加油每一天!!!

posted @ 2020-10-12 15:49  張先森  阅读(505)  评论(0编辑  收藏  举报