为什么在Python中执行2/5.0会出错?
可能重复的问题:
Python中的浮点数 - 字符串 - 浮点数的奇怪现象
在Python中,2/5.0
或 2/float(5)
计算出来的结果是 0.40000000000000002
为什么最后会出现这个错误,怎样才能得到正确的值来进行后续计算呢?
5 个回答
2
上面提到的Ignacio给出了正确的答案。
有一些IEEE标准专门用来高效地把浮点数存储到计算机的二进制系统中。这些标准详细说明了数字是如何存储的,几乎每台计算机都遵循这些规则。
不过,这些标准也有缺陷。二进制数字无法处理大多数正常的数字,只能处理2的幂。为了提高效率,这些标准选择了一些简单的方法,而不是复杂的计算来处理小数点后的位数。
这样一来,你的系统运行得稍微快一点,虽然有时候你可能会想骂它。关于如何改变Python来解决这些问题的讨论时有发生,但要做到这一点而不损失太多效率并不简单。
解决这个问题的方法有:
一个选择是使用标准库中的“decimal”包。如果你按照示例操作,忽略那些长长的说明,它可以满足你的需求。不过效率就不太好说了。
第二个方法是自己手动进行四舍五入和字符串截断,放在一个输出函数里。如果你从来不打印那些小数位,数字稍微有点偏差又有什么关系呢?
3
因为浮点数运算不是完全准确的。所以在你进行其他计算时,应该使用这个值,并在最后的时候把结果四舍五入。如果你需要非常精确的结果,可以使用其他的数据类型。