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博客

相關文章
相關標籤/搜索