js浮点数的计算总结

在js浮点值的计算中,不少时候会出现不许确的状况,以下面的状况javascript

console.log(2.2 + 2.1)          //  4.300000000000001
console.log(2.2 - 1.9)          // 0.30000000000000027
console.log(2.2 * 2.2)		// 4.840000000000001
console.log(2.1 / 0.3)		// 7.000000000000001
console.log(10 - 9.99)		// 0.009999999999999787

  而后上网找了一些解决办法(参考博文底部连接),原理就是将浮点数从点号开始分开成两个整数,而后进行计算。以下:java

//加法
function add(a, b) { var c, d, e; try { c = a.toString().split(".")[1].length; } catch(f) { c = 0; } try { d = b.toString().split(".")[1].length; } catch(f) { d = 0; } return e = Math.pow(10, Math.max(c, d)), (mul(a, e) + mul(b, e)) / e; } //减法 function sub(a, b) { var c, d, e; try { c = a.toString().split(".")[1].length; } catch(f) { c = 0; } try { d = b.toString().split(".")[1].length; } catch(f) { d = 0; } return e = Math.pow(10, Math.max(c, d)), (mul(a, e) - mul(b, e)) / e; } //乘法 function mul(a, b) { var c = 0, d = a.toString(), e = b.toString(); try { c += d.split(".")[1].length; } catch(f) {} try { c += e.split(".")[1].length; } catch(f) {} return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c); } //除法 function div(a, b) { var c, d, e = 0, f = 0; try { e = a.toString().split(".")[1].length; } catch(g) {} try { f = b.toString().split(".")[1].length; } catch(g) {} return c = Number(a.toString().replace(".", "")), d = Number(b.toString().replace(".", "")), mul(c / d, Math.pow(10, f - e)); }

 

  这个不失为一种很不错的方法。可是当时作项目时好像只有一处地方用到,为了一处地方而粘贴这么一段代码,有点小题大做的感受,后来我就临时用了另外一种方法,就先将浮点数乘以10的10次方变成整数,进行计算后将结果再除以10的10次方。结果以下。.net

能够看出,该方法仍是有效的,就是麻烦了点。值得注意的是,在除法那里两个值都乘以c以后,后面不须要再除以c,我犯了这个错误,因此我记下来了blog

 

好了,大概就这么多了。ip

 

参考博客连接:http://blog.csdn.net/qinshenxue/article/details/43671763博客

相关文章
相关标签/搜索