奇怪的計算
0.1 + 0.2 === 0.3
//false
0.1 + 0.2 == 0.3
//false
0.3 / 0.1
//2.9999999999999996
(0.3 - 0.2) === (0.2 - 0.1)
//false複製程式碼
按照正常的想法,上面的輸出都是有問題的.
如果0.1+0.2
不等於0.3
,那麼等於什麼呢?
//0.30000000000000004
複製程式碼
JavaScript 內部,所有數字都是以64位浮點數形式儲存,即使整數也是如此。所以,1
與1.0
是相同的,是同一個數
那麼上面的結果是怎麼來的呢?
數值精度
精度範圍-(2^53-1)~(2^53-1)
數值範圍
2^1024~2^(-1023)
最大值
Number.MAX_VALUE
//1.7976931348623157e+308複製程式碼
最小值
Number.MIN_VALUE
//5e-324
複製程式碼
數值的表示
十進位制,十六進位制,科學計數法.
下面兩種情況會自動轉化為科學計數法
- 總位數超過21位
1234567890123456789012
//1.2345678901234568e+21
123456789012345678901
//123456789012345680000複製程式碼
- 小數點後面至少有6位0
0.0000003
//3e-7
0.000003
//0.000003複製程式碼
進位制
- 十進位制:沒有前導0的數值。
- 八進位制:有字首
0o
或0O
的數值,或者有前導0、且只用到0-7的八個阿拉伯數字的數值。- 十六進位制:有字首
0x
或0X
的數值。- 二進位制:有字首
0b
或0B
的數值
預設會都轉化為十進位制
特殊值
+0 -0,預設是相等的.
1/0
//Infinity
1/-0
//-Infinity複製程式碼
NaN,表示“非數字”(Not a Number)
出現的場合
- 字串解析出錯
5 - 'x'
//NaN
複製程式碼
- 數學函式運算
Math.log(-1)
//NaN複製程式碼
- 0/0