我试图看看两点之间的计算距离是否小于给定半径,如下所示:
if distance(lat1, long1, lat2, long2) < radius:
print "Distance: %s Radius: %s" % (distance(lat1, long1, lat2, long2), radius)
此处distance
会有效地返回float
,而radius
则会int
。
我知道我不应该直接比较浮点数并且我应该与阈值进行比较。鉴于此,是否有更好的方法来检查浮点数是否小于int(或另一个浮点数)。
更新 所有答复似乎都可以进行这种比较。但我确实观察到了这一点:
>>> 1.2000000000000001 > 1.2
True
>>> 1.20000000000000001 > 1.2
False
这不是问题吗?我在Mac上使用Python 2.6.7
答案 0 :(得分:13)
直接比较它们,根本就没有坏处。
Python处理非常好地比较不同类型的数字:
>>> type(1.1)
<class 'float'>
>>> type(1)
<class 'int'>
>>> 1.1 > 1
True
>>> 1.1 < 1
False
>>> 1 < 2
True
>>> 2.2 == 2.2
True
>>> 2 == 2.2
False
>>> 1.6 < 2
True
>>> 1.6 > 2
False
>>> 1.6 == 2
False
Python是鸭子类型,因此通常你根本不用担心类型。
将相等的浮点数与precision errors引起的其他浮点数进行比较可能存在一些问题:
>>> 0.3+0.3+0.3 == 0.9
False
>>> 0.3+0.3+0.3
0.8999999999999999
但与int
和/或<
或>
操作相比,您不必担心。
在您的更新中,我们可以使用decimal
模块来显示原因:
>>> Decimal(1.2000000000000001)
Decimal('1.20000000000000017763568394002504646778106689453125')
>>> Decimal(1.20000000000000001)
Decimal('1.1999999999999999555910790149937383830547332763671875')
但这真的很重要吗?浮点数是一个固有的问题,但只有你需要非常高的精度才能解决问题。