> For the complete documentation index, see [llms.txt](https://mm.ricky.moe/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mm.ricky.moe/interview/inverview-record/0.1-+-0.2.md).

# 0.1 + 0.2

## 翻车现场

![](https://3490195898-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LnQxDcxCKODvYvTUWe3%2F-Ly8VTXys2HNbpr50Nvm%2F-LyC18WJh4KL_trol3_t%2Fimage.png?alt=media\&token=88098875-1ec4-4459-9c03-caeeb95750e5)

## 原因

Javascript 使用 Number 表示数字，使用64位固定长度来表示。

![](https://3490195898-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LnQxDcxCKODvYvTUWe3%2F-Ly8VTXys2HNbpr50Nvm%2F-LyC6dGJno5EJmKaaW2r%2Fimage.png?alt=media\&token=124c4e0f-6558-478b-8d51-171319ab3567)

`0.1`的二进制舍去之后就是（怎么转换？ 有阶码等原理）

```
0.00011001100110011001100110011001100110011001100110011010
```

`0.2`的舍去之后的二进制表示为：

```
0.0011001100110011001100110011001100110011001100110011010
```

两数相加转成10进值正好是\`0.30000000000000004

## 第二个例子

相同的原理，下面的乘式也会出错

```
35.41 * 100 = 3540.9999999999995
```

## 解决

* [ ] 学习理解 [number-precision](https://github.com/nefe/number-precision)
