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
其中有很多求对数,正弦余弦的方法,你可以看看。这些函数在处理一些视图算法的时候非常有用,这里就不介绍了。
网友评论