美文网首页
JavaScript中判断两数之和是否等于第三个数

JavaScript中判断两数之和是否等于第三个数

作者: 470d98b91bd3 | 来源:发表于2020-11-07 23:05 被阅读0次

    相信下面一个方法是绝大多数人都会写到的

    function judgeEqual(num1, num2, total) {
    return num1 + num2 === total
    }
    
    

    然后如果单元测试为

    
    judgeEqual(1, 2, 3);   // true
    
    judgeEqual(0.1, 0.2, 0.3); // false
    

    其实这个问题我们在学JavaScript的时候就知道0.1 + 0.2 并不等于 0.3;因为二进制浮点数中的0.1跟0.2并不是十分精确,他们想加的结果并非等于0.3,而是一个比较接近的数字0.30000000000000004

    那么我们应该怎么判断使得在JavaScript中让数学上的 0.1 + 0.2 = 0.3 成立呢

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

    从ES6开始,该值定义在Number.EPSILON中,我们可以直接拿来用,也可以为ES6之前的版本写polyfill

    
    if (!Number.ESPILON) {
      Number.ESPILON = 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
    
    

    本篇内容来源于《YOU DON'T KNOW JAVASCRIPT II》

    打算做一个读书笔记,就这里开始吧

    相关文章

      网友评论

          本文标题:JavaScript中判断两数之和是否等于第三个数

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