首頁  >  文章  >  web前端  >  JavaScript教程之小數計算問題

JavaScript教程之小數計算問題

巴扎黑
巴扎黑原創
2017-09-11 11:47:511813瀏覽

先上圖:

什麼狀況?

原因:js採用二進制進行小數計算

先看十進制的小數轉換為二進制的方法:

十進制數的整數位是二進制數的整數位,十進制數的小數位是二進制數的小數位

假如我們有小數111.4(10),我們對他進行一下計算:

先取小數位0.4,對其進行「乘二取整法」

0.4*2=0.8     取結果的的整數位置上的數字是0          |                               服用1     *2=1.2                                                     取1      |  序

0.2*2=0.4                                                     取0      |  寫

0.4*2=0.8                                                     取0      |  出

0.8*2=1.6                                                     取1      |

0.6*2=1.2                          

0.2*2=0.4                                |

來到這裡了,我們發現出現了循環,因此可以推論小數點後的二進位是

0.01100110……(循環0110)

整數就不寫了,方法是除2取餘法

題目中2.6+2.6+2.6 =7.800000000001,JavaScript中計算小數運算時,都會先將十進制的小數換算到對應的二進制,一部分小數並不能完整的換算為二進制,這裡就出現了第一次的誤差。待小數都換算為二進位後,再進行二進位間的運算,得到二進位結果。然後再將二進制結果換算為十進制,這裡通常會出現第二次的誤差。

 

解決方法:指定保留幾個小數   (7.8).toFixed(2)=7.80;,此方法有可能損失精確度,網路上也有自訂這種加法的方法

以上是JavaScript教程之小數計算問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn