# 2.6 Number

## **1. 0.1 + 0.2 === 0.3 ?**

```
0.1 + 0.2 === 0.3; // false
```

將 0.1、0.2 和 0.3 分別轉為二進位來看

* 0.1 轉成二進位表示為 0.0001100110011…（0011 循環）
* 0.2 轉成二進位表示為 0.00110011001100…（1100 循環）
* 0.3 轉成二進位表示為 0.0100110011001…（1001 循環）

**因此 0.1 + 0.2 永遠不會剛好等於 0.3。**

## 2. NaN

### NaN（無效的數字） <a href="#nan-wu-xiao-de-shu-zi" id="nan-wu-xiao-de-shu-zi"></a>

NaN 表示值為無效的數字（invalid number），會產生 NaN 的原因是

* 做數學運算時的兩個運算元的資料型別並非都數字或無法轉成有效的十進位或十六進位的數字
* 無意義的運算，例如：`0 / 0`、`Infinity / Infinity` 都會得到 NaN

#### typeof <a href="#typeof" id="typeof"></a>

NaN 既然表示是無效的數字，依舊還是數字，因此在資料型別的檢測 `typeof NaN` 結果就是 number，不要被字面上的意思「不是數字」（not a number）給弄糊塗了。

#### 運算結果是 NaN <a href="#yun-suan-jie-guo-shi-nan" id="yun-suan-jie-guo-shi-nan"></a>

NaN 與任何數字運算都會得到 NaN。
