我必须比较两个数字。其中一个来自custt python代码,另一个来自numpy。调试器显示它们具有相同的值'29 .0',但第一个类型为float
,第二个类型为float64
,因此a == b
和a - b == 0
为False
。我怎么处理它?有什么办法吗?
强制常规python变量为float64
或numpy默认使用float
?
更新:所有这些值的末尾来自写入29.0
的同一文件,因此我认为数值不存在差异。
答案 0 :(得分:18)
你不应该用任何编程语言来比较浮点数是否相等,因为你永远不会知道它们完全相同。相反,您应该测试它们的差异是否小于容差:
if abs(a - b) < 1e-10
所以这个问题与float
和float64
(Python自动转换它们)之间的区别没有关系,但是存在比较浮点数是否相等的基本问题。
答案 1 :(得分:8)
如果您正在使用numpy,那么执行Antonis建议的最佳方法是使用函数np.allclose(a, b)
。您还可以指定容差(上面的1e-10
)。