先上圖:
什麼狀況?
原因: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中文網其他相關文章!