怪异代码
在Chrome控制台键入如下代码:
0.1 + 0.2
会发现结果并不等于 0.3,而是 0.30000000000000004
浮点数精度问题
其实这不是一个bug,很多其他编程语言都有这个问题,这是因为计算机保存数据都是转化成0、1进行保存。浮点数会转换成二进制保存,问题就在于保存的时候丢失了精度。
浮点数转化成二进制
首先我们来了解一下浮点数如何转换成二进制:
* 整数部分除以2取余,然后余数逆向排列
* 小数部分乘以2取整数部分,然后顺序排列
相信整数如何转换成二进制大家都很熟悉,重点看小数部分。
0.1 是怎么转换成二进制的呢?
0.1 * 2 = 0.2 // 取整数位 0
0.2 * 2 = 0.4 // 取整数位 0 0
0.4 * 2 = 0.8 // 取整数位