当前位置:首页>python>Python教程(11)为什么0.1 + 0.2 不等于0.3

Python教程(11)为什么0.1 + 0.2 不等于0.3

  • 2026-09-26 23:41:21
Python教程(11)为什么0.1 + 0.2 不等于0.3

你好,我是雨霖八珞,同名B站UP主。关注合集不迷路。以下内容为个人教学,真诚分享,欢迎交流。

你有没有遇到过这种情况:

明明 0.1 + 0.2 应该等于0.3,

Python 却算出来一个 0.30000000000000004。

这种情况叫“不确定尾数”。

意思是:两个浮点数计算后,结果可能会在末尾多出一串“不确定”的数字。

说白了,就是“误差”

还有更多类似的例子


为什么会有不确定尾数

这不是Python的bug,而是几乎所有编程语言都会遇到的情况。

究其原因,是因为计算机是用二进制来表示数据的。

我们可以这样来理解:

在十进制数里,有些小数可以精确地表示,比如0.5,就是1/2

但有些小数却无法精确地表示,比如1/3 就是0.333……,无限循环,永远写不完,后面无论取多少位,一定是有误差的。

同样的道理,在二进制里:

  • 所有整数是可以精确表示

  • 但不是所有小数都可以精确表示

0.1 在二进制里就是无限循环小数,就像十进制里的 1/3 一样

计算机的存储空间是有限的,只能“截断”到某一位,存一个近似值。所以就有了误差。

数字是如何用二进制转换,以后在讲信息编码时会详细说到,不过重点是讲整数如何转换成二进制,浮点数转换成二进制会略讲。

怎么处理不确定尾数

既然浮点数有误差,在计算或比较时,该如何处理呢?

1、判断两个浮点数是否相等

比如,0.1+ 0.2 是否等于 0.3

因为 0.1 + 0.2 的结果是 0.30000000000000004,不等于 0.3,这是悖论

处理方法:判断它们的差值是否足够小,比如0.1+0.2 - 0.3的差值小于0.0000000001,我们就认为0.1+ 0.2 等于 0.3

先了解思路即可,具体语句会在选择结构中讲解。

2、让结果看起来正常

如果你只是想让输出结果好看,可以用round()四舍五入

round(x, n) 表示把 x 保留 n 位小数。

事实上,在计算并输出的时候,round()的使用频率还是很高的。

比如计算圆的周长时:

如果你不用round(),可能输出一长串数字,看起来不够整洁,round(c,2)可以让结果保留2位小数。

本公众号内容均为原创。如需转载或引用,请先联系我。谢谢你的尊重。

觉得不错的话,伙伴们记得关注、在看、转发和点赞哈!

最新文章

随机文章