为什么计算机编程语言中:0.1+0.2不等于0.3
最近在学习JS过程中发现在计算机JS时发现了一个非常有意思事,0.1+0.2的结果不是0.3,而是0.30000000000000004,但先将小数做乘法然后相加,再除回来就得到想要的0.3 我用python试了一下,发现python也是一样的,结果也是0.30000000000000004。 然后我开始信息搜集,最后找到了答案。想知道这其中的原因,要先理解这些点:二进制、指数形式、IEEE 754标准。 1、二进制 在计算机中所有的数据都是二进制形式存储的,包括整数、浮点数以及其他所有类型的数据。我们将十进制的0.1以及0.2转换成二进制 转换的方法也比较简单,整数转换成二进制:就是用整数除以2然后从下往上取余数,下图用100举例 然后小数转换成二进制就是,小数部分无限乘以2,然后顺序取整。下图用0.375举例 2、指数形式 用指数方式表示可以在有限的空间里存储更大的数值。 所有的十进制数都可以用指数形式表示,成为D=M*10 E ,比如100可以表示为1*10 2 。 二进制数也可以用指数形式表示,B=M*2 E 的形式,这里的E为指数,M为B的位数。比如0.011可以表示为1.1*10 -10 ,这里的“-10”表示的是-2。 3、浮点数IEEE754标准 JavaScript中所有数字包括整数和小数都只有一种类型,是遵循 IEEE 754 标准,使用64位固定长度来表示