zoukankan      html  css  js  c++  java
  • 你不知道的 JavaScript 系列中( 8 ) -浮点数

    二进制浮点数最大的问题是会出现如下的情况:
    0.1+0.3 === 0.3; // false

    从数学角度来说,上面的条件判断应该为 true,可结果为什么是 false 呢?

    简单来说,二进制浮点数中的 0.1 和 0.2 并不是十分精确,它们想加的结果并非刚好等于 0.3,而是一个比较接近的数字,0.30000000000000004,所以条件判断为 false。
    那么应该怎么来判断 0.1+0.2 和 0.3 是否相等呢?最常见的方法是设置一个误差范围值,通常成为 “机器精度”,对 JS 来说,这个值通常是 2^-52。

    从 ES6 开始,该值定义在 Number.EPSILON 中,可以直接用,也可以在 ES6 之前对版本写 polyfill

    if(!Number.EPSILON) {
      Number.EPSILON = Math.pow(2,-52);
    }
    
    function numbersCloseEnoughToEqual(n1, n2) {
      return Math.abs(n1 - n2) < Number.EPSILON
    }
    
    var a = 0.1 + 0.2;
    var b = 0.3
    
    numbersCloseEnoughToEqual(a, b); // true
    numbersCloseEnoughToEqual(0.0000001, 0.0000002); // false

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

  • 相关阅读:
    jQuery ajax传多个参数
    PHP 上传图片和安全处理
    PHP CI框架email类发送邮件
    2016-4-7
    jquery 轮播图
    CI控制器的继承问题
    2016-4-1
    2016-3-31 总结
    php内置函数call_user_func()
    discuz-目录
  • 原文地址:https://www.cnblogs.com/wzndkj/p/12866780.html
Copyright © 2011-2022 走看看