1:问题
本来已经快要忘记这个问题,但是今天在逛某问的时候,看到了这个问题,为什么5.2+3.1等于8.29999,而不是8.3呢?
2:原因
这个就要涉及到计算机是如何进行运算的。
在学完计算机硬件基础的课程(当时天真的以为一个软件的干嘛学校要开设硬件的课程,那种课我们全班都学的并不是很好,估计是和我一样的想法吧。)后,就可以了解到计算机进行计算是通过二进制计算的,也就是说我们写的十进制的加法、减法这些都是要转换为二进制才能运算的。
2.1:十进制转为二进制
-
整数部分
整数部分采取除二取余
-
小数部分
小数转换成二进制就比较麻烦些,需要不停的乘以2,然后将得到的结果的整数部分作为二进制的一位,然后将结果的小数部分再乘以2,依此循环,直到小数部分为0.
可以看到0.2转换成了一个二进制的无限循环小数,而计算机在计算的时候,只能表示一定长度的数值,所以在计算的时候0.2因为进制转换丢失了一定的精度。
同理3.1中的0.1也是,因此这就是为什么5.2+3.1=8.2999的原因。