代码之家  ›  专栏  ›  技术社区  ›  Fidel90

浏览器支持Number.EPSILON?

  •  3
  • Fidel90  · 技术社区  · 8 年前

    我想使用 Number.EPSILON MDN states Firefox和Chrome支持它,但IE和Safari不支持它。

    我自己在IE11和Edge的控制台上测试过它。Edge给了我 2.220446049250313e-16 正如预期,IE11给出了 undefined .我不能亲自测试Safari。

    1. 是否有支持表显示对不同浏览器版本的支持?

    2. 我能安全使用吗 var eps = Number.EPSILON || 2.220446049250313e-16; 作为后备?

    1 回复  |  直到 8 年前
        1
  •  5
  •   TylerY86    8 年前

    1) 你可以自己试试 browserling 然后打卡 "https://jsfiddle.net/jz350gf1/1/" (没有引号)。如果看到红色,则表示不支持。

    javascript代码是 document.body.bgColor = Number.EPSILON !== undefined ? 'lime' : 'red'; .

    例如,Vista上的IE9和Safari 5.1不支持它。

    下面还有兼容性表 the MDN page for Number.EPSILON 目前,它声称只有Chrome、Firefox和(可能)Opera支持它。高于5.1的Safari版本可能支持它。但我没有Mac电脑来测试它。

    在caniuse.com上, here's Opera可能根本不支持它?不,它确实支持它。

    不管怎样,就像2)是的。常数就是常数就是常数。在所有语言中,双精度浮点的ε总是相同的。尽管您应该根据 this wiki page ,您应该能够通过计算得出它。 Here's a demonstration.

    function getEpsilon() {
      var e = 1.0;
      while ( ( 1.0 + 0.5 * e ) !== 1.0 )
        e *= 0.5;
      return e;
    }
    
    alert("And the epsilon is... "+getEpsilon());

    所以你可以这么做 var eps = Number.EPSILON || getEpsilon(); 如果您想对可能使用低于双精度浮点数类型的非一致浏览器保持高度警惕,尽管我认为不存在(我愿意接受例外)。:)