Python跟我说0.1+0.2!=0.3,难道这么多年的数学白学了?

问题

今天闲来无事在IDLE中计算了一下0.1 + 0.2,结果让我大吃一惊,竟然等于0.30000000000000004,纳尼?虽然只是小数点后面第十七位多了个4,但是这也令我陷入深深的思考,难道我这么多年的数学白学了?

我们先来看一下程序运行的结果:

在这里插入图片描述

当然有些同学可能会想这会不会是一个bug呢?那么我们来做一些测试:

Python跟我说0.1+0.2!=0.3,难道这么多年的数学白学了?_第1张图片

这段程序大致的意思就是当i < 1时,i会加0.1,然后将每一个i的值都打印出来。看到结果,大家应该不会说python有那么多的bug吧,这里面似乎有着不为人知的秘密呢。

解惑

与Python中的整数不同,Python的浮点数存在误差,是因为它采用了IEEE754标准来存放浮点数,所以这就在根本上导致了Python的浮点数会存在一定精度上的误差。那么定点数和浮点数的原理是什么呢?我在这里就不作解释了,主要谈一下如何解决如何使0.1+0.2 == 0.3的问题,因为在Python的它会给你这样的结果:

>>> 0.1 + 0.2 == 0.3
False

解决这个问题也很简单,我们需要用到一个decimal模块。在Python中导入模块用到的语句是import。具体程序如下:

Python跟我说0.1+0.2!=0.3,难道这么多年的数学白学了?_第2张图片

导入decimal模块后,我们创建对象a和b,注意括号里面的数字使用单引号括起来的代表它是字符串。在这之后我们就看到了a + b = 0.3的结果,但是这个时候还得注意直接用a + b0.3相比仍然是不等于的,因为它们其实是不同的对象,所以我们还是需要创建对象c,这样一来a + b == c就正确了。

你可能感兴趣的:(python,python,编程语言,bug)