美文网首页前端开发es6入门基础
ES6基础入门教程(十)数学方法

ES6基础入门教程(十)数学方法

作者: 党云龙 | 来源:发表于2019-11-04 15:49 被阅读0次

    0.1+0.2=?


    先来看这个:

    let a = 0.1;
    let b = 0.2;
    console.log(a+b); //0.30000000000000004
    
    

    牛逼的事情就出现了。你会发现:0.1+0.2并不等于0.3 这就比较狠了。
    他有可能是因为小数点后面10个0,甚至20个0以后的值不相等一样导致的。

    console.log((a+b)==0.3); //false
    

    解决方法


    //es5 解决方式
    let c = Number(0.1); //转化为数字
    let d = Number(0.2);
    console.log((c+d).toFixed(2)); //0.30
    

    es6中 新增了一个Number.EPSILON来解决这个问题,

    // 将比较的两个数字误差设置为2的50次方以内
    function withinErrorMargin (left, right) {
      return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
    }
    console.log(0.1 + 0.2 === 0.3);
    console.log(withinErrorMargin(0.1 + 0.2, 0.3)) // true   
    

    EPSILON 可以理解为最小误差值。
    Number.EPSILON其实就是表示js能够表示的数字最小精度。

    ES6 在 Math 对象上新增了 17 个与数学相关的方法。所有这些方法都是静态方法,只能在 Math 对象上调用。
    虽然方法很多,但是,我们只要记住常用的就行了,不常用的到时候再查查就行。

    我举例几个还算常用的:

    1.Math.trunc 去除小数点后面的部分

    console.log(Math.trunc(-12.32454));
    //-12
    

    2.Math.sign 判断一个数是正数负数还是0

    console.log(Math.sign(-5)); // -1
    console.log(Math.sign(5)); // +1
    console.log(Math.sign(0)); // 0
    console.log(Math.sign(NaN)); // NaN
    

    其中有很多求对数,正弦余弦的方法,你可以看看。这些函数在处理一些视图算法的时候非常有用,这里就不介绍了。

    相关文章

      网友评论

        本文标题:ES6基础入门教程(十)数学方法

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