為什么在JavaScript中0.1+0.2不等於0.3?


0.1+0.2不等於0.3?是不是有點顛覆你的認知,但是,在js中,是真實存在的!

console.log(0.1+0.2);  // 0.30000000000000004

其實這都是因為浮點數運算的精度問題。

簡單來說,因為計算機只認識二進制,在進行運算時,需要將其他進制的數值轉換成二進制,然后再進行計算。

由於浮點數用二進制表達時是無窮的:

// 將0.1轉換成二進制
console.log(0.1.toString(2)); // 0.0001100110011001100110011001100110011001100110011001101

// 將0.2轉換成二進制
console.log(0.2.toString(2)); // 0.001100110011001100110011001100110011001100110011001101

IEEE 754 標准的 64 位雙精度浮點數的小數部分最多支持53位二進制位,所以兩者相加后,因浮點數小數位的限制而截斷的二進制數字,再轉換為十進制,就成了 0.30000000000000004,所以在進行算術計算時會產生誤差。

64位比特又可分為三個部分:

  • 符號位S:第 1 位是正負數符號位(sign),0代表正數,1代表負數
  • 指數位E:中間的 11 位存儲指數(exponent),用來表示次方數
  • 尾數位M:最后的 52 位是尾數(mantissa),超出的部分自動進一舍零

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM