toFixed可能存在四舍五入问题
toFixed可能存在四舍五入问题,与浏览器有关。
解决参考http://www.cnblogs.com/snandy/p/4886131.html:
个人未测试。
function toFixed(num, s) {
var times = Math.pow(10, s)
var des = num * times + 0.5
des = parseInt(des, 10) / times
return des + ''
}
我们在判断比较两个浮点数时,可以通过这个常量来进行判断比较,定义一个最小的进度范围,误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。比如,误差范围设为2的-50次方(即Number.EPSILON * Math.pow(2, 2)),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。
function withinErrorMargin (left, right) {
return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
}
0.1 + 0.2 === 0.3
withinErrorMargin(0.1 + 0.2, 0.3)
1.1 + 1.3 === 2.4
withinErrorMargin(1.1 + 1.3, 2.4)
比较数字
需要注意,NaN与任何值都不相等,包括它自己。
js中,所有的是最都是双精度的,因为双精度都是近似值。
比较的是整数,(在Number.MIN_SAFE_INTEGER和Number.MAX_SAFE_INTEGER之间,包括两端的值),可放心比较。
比较的是小数,最好测试它是否足够接近目标值。js存在一个数值常量Number.EPSILON,大约是2.22e-16,它通常代表需要考虑两个数字差别时的差异程度。
比较是否等于0.3:
Math.abs(n-0.3) < Number.EPSILON