美文网首页
较小的数值

较小的数值

作者: 了凡和纤风 | 来源:发表于2020-03-08 13:39 被阅读0次

    JavaScript只有一种数值类型:number(数字)。JavaScript没有真正意义上的整数,这也是它一直以来为人诟病的地方。JavaScript中的“整数”就是没有小数的十进制数。所以 42.0 即等同于 “整数”42。

    JavaScript 中的数字类型是基于 IEEE754 标准来实现的,该标准通常也被称为“浮点数”。JavaScrip 使用的是 “双精度” 格式(即 64 位二进制)

    二进制浮点数最大的问题 (不仅 JavaScript,所有遵循 IEEE 754 规范的语言都是如此),会出现如下情况

    0.1 + 0.2 === 0.3 // false
    

    简单来说,二进制浮点数中的 0.1 和 0.2 并不是十分精确,他们相加的结果并非刚好等于 0.3,而是一个比较接近的数值 0.30000000000000004, 所以条件判断结果为 false

    最常见的方法是设置一个误差范围值,通常称为“机器精度(nacinne epsilon)”,对 JavaScript的数值来说,这个值通常是 2^-52(2.220446049250313e-16)

    从 ES6 开始,这个值定义在 Number.EPSILON

    ES6之前的 polyfill:

    if (!Number.EPSILON) {
      Number.EPSILON = Math.pow(2, -52)
    }
    

    可以使用 Number.EPSILON 来比较两个数值是否相等

    function numbersCloseEnoughToEqual(n1, n2) {
       return Math.abs(n1 - n2) < Number.EPSILON
    }
    
    let a = 0.1 + 0.2
    let b = 0.3
    
    numbersCloseEnoughToEqual(a, b) // true
    

    能够呈现的最大浮点数大约是 1.798e+308,它定义在 Number.MAX_VALUE
    最小的浮点数大约是 5e-324,他不是负数,但是无限接近与0,定义在 Number.MIN_VALUE

    相关文章

      网友评论

          本文标题:较小的数值

          本文链接:https://www.haomeiwen.com/subject/vnyddhtx.html