0.1 + 0.2 != 0.3

0.1 + 0.2 != 0.3
Tom深入分析0.1 + 0.2 != 0.3
计算机在存储数字是通过二进制来存储的,呈现的时候是通过十进制来呈现的,所以会有误差
那为什么计算机的二进制存储会造成误差呢?下面来一步步深究
十进制转二进制的转换规则
整数
- 转换规则
除二取余,然后倒序排列,高位补零
可以得出1010001,可以看出有7位,但是计算机内部标识数是定长的,例如8位、16位、32位,所以7位是不够的,需要高位补0,也就是01010001,规范写法(81)10 = (01010001)
负整数
- 转换规则
- 把
正整数转成二进制 - 对二进制
取反 - 对取反后的二进制进行
加1
- 把
小数
- 转换规则
- 对
小数点以后得数乘以2,得出结果,取结果的整数部分(不是0就是1),然后再对结果的小数点以后的数乘以2,得出结果,再取结果整数部分,再然后然后再对结果的小数点以后的数乘以2。。。。以此类推。。直到小数部分为0或者位数已经到达位数。再把这个过程中取的整数按先后顺序排好就行了。
- 对
0.1 + 0.2
再回到 0.1 + 0.2 这个问题
可以看到,0.1和0.2转为二进制都是无限循环的,超过了最大位数, 所以存储时只能通过近似值取存储他们,那自然的,当0.1 + 0.2 时,近似值转十进制可定也是近似值,所以会有误差。














