浮点数的坑
- JavaScript中,数字都是以64位浮点数存储,包括整数,由于浮点数不是精确的数,某些运算只有整数才能完成,此时 JavaScript 会自动把64位浮点数,转成32位整数,然后再进行运算,所以运算可能会出现偏差
console.log(0.1+0.1===0.2); //true
console.log(0.1+0.2===0.3); //false
console.log(0.1+0.3===0.4); //true
console.log(0.1+0.4===0.5); //true
console.log(0.1+0.5===0.6); //true
console.log(0.1+0.6===0.7); //true
console.log(0.1+0.7===0.8); //false
console.log(0.1+0.8===0.9); //true
console.log(0.1+0.9===1.0); //true
console.log(1.0/0.1); // 10
console.log(0.9/0.1); // 9
console.log(0.8/0.1); // 8
console.log(0.7/0.1); // 6.999999999999999
console.log(0.6/0.1); // 5.999999999999999
console.log(0.5/0.1); // 5
console.log(0.4/0.1); // 4
console.log(0.3/0.1); // 2.9999999999999996
console.log(0.2/0.1); // 2
console.log(0.1/0.1); // 1
总结
- 其他算法就不做介绍,至于详细解释,有兴趣可以网上搜索,遇到这种问题最简单的方法就是乘以10的倍数变成整数,避开小数
console.log((0.3*10)/(0.1*10)); //3