Python-float 0.1+0.2为什么不等于0.3

运行如下:

原理:

举个例子,float类型39.29。在计算机存储时,它会先把整数部分39转换成二级制,至于后面的0.29则会一直将它乘以2,如果大于1则减去一继续乘以2,如果等于1则停止。

Python-float 0.1+0.2为什么不等于0.3_第1张图片

这样就难免出现一些问题,我们可以从上面的图片看到接下来的操作将无限循环0.16*2=0.32及后面的计算。因为是无限循环,而我们float类型一般都是32位、64位存储,超过了存储范围,自然数据就不准确了。

接下来对得到的二进制进行科学计数法表示(小数点向前移动了5个位置,后面由于是二进制所以是2**5:

Python-float 0.1+0.2为什么不等于0.3_第2张图片

因为是无限循环,而我们float类型一般都是32位、64位存储,超过了存储范围,自然数据就不准确了。

Python-float 0.1+0.2为什么不等于0.3_第3张图片

建议:对于敏感的小数类型,可以使用decimal。

你可能感兴趣的:(python,开发语言,后端,数据结构)