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

运行如下:

原理:

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

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

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

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

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

猜你喜欢

转载自blog.csdn.net/suic009/article/details/122815920