js浮點數的計算總結

來源:互聯網
上載者:User

標籤:次方   article   除法   底部   解決辦法   開始   ret   .net   try   

在js浮點值的計算中,很多時候會出現不準確的情況,如下面的情況

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

  然後上網找了一些解決辦法(參考博文底部連結),原理就是將浮點數從點號開始分開成兩個整數,然後進行計算。如下:

//加法
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次方。結果如下。

可以看出,該方法還是有效,就是麻煩了點。值得注意的是,在除法那裡兩個值都乘以c之後,後面不需要再除以c,我犯了這個錯誤,所以我記下來了

 

好了,大概就這麼多了。

 

參考部落格連結:http://blog.csdn.net/qinshenxue/article/details/43671763

js浮點數的計算總結

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.