前端开发es6入门基础

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

2019-11-04  本文已影响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

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

上一篇下一篇

猜你喜欢

热点阅读