为什么在Python中执行2/5.0会出错?

3 投票
5 回答
1530 浏览
提问于 2025-04-15 19:12

可能重复的问题:
Python中的浮点数 - 字符串 - 浮点数的奇怪现象

在Python中,2/5.02/float(5) 计算出来的结果是 0.40000000000000002

为什么最后会出现这个错误,怎样才能得到正确的值来进行后续计算呢?

5 个回答

2

上面提到的Ignacio给出了正确的答案。

有一些IEEE标准专门用来高效地把浮点数存储到计算机的二进制系统中。这些标准详细说明了数字是如何存储的,几乎每台计算机都遵循这些规则。

不过,这些标准也有缺陷。二进制数字无法处理大多数正常的数字,只能处理2的幂。为了提高效率,这些标准选择了一些简单的方法,而不是复杂的计算来处理小数点后的位数。

这样一来,你的系统运行得稍微快一点,虽然有时候你可能会想骂它。关于如何改变Python来解决这些问题的讨论时有发生,但要做到这一点而不损失太多效率并不简单。

解决这个问题的方法有:

一个选择是使用标准库中的“decimal”包。如果你按照示例操作,忽略那些长长的说明,它可以满足你的需求。不过效率就不太好说了。

第二个方法是自己手动进行四舍五入和字符串截断,放在一个输出函数里。如果你从来不打印那些小数位,数字稍微有点偏差又有什么关系呢?

3

因为浮点数运算不是完全准确的。所以在你进行其他计算时,应该使用这个值,并在最后的时候把结果四舍五入。如果你需要非常精确的结果,可以使用其他的数据类型。

22

欢迎来到IEEE754,祝你玩得愉快

建议使用decimal

撰写回答