在Python中比较float和int

2024-06-02 06:41:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想看看两个点之间的计算距离是否小于给定半径,如下所示:

if distance(lat1, long1, lat2, long2) < radius:
      print "Distance: %s Radius: %s" % (distance(lat1, long1, lat2, long2), radius)

这里distance将有效地返回float,而radiusint

我知道我不应该直接比较浮点数,我应该比较一个阈值。既然如此,有没有更好的方法来检查一个浮点是否小于int(或另一个浮点)。

更新 从所有的回复来看,这种比较似乎是可以的。但我确实观察到:

>>> 1.2000000000000001 > 1.2
True
>>> 1.20000000000000001 > 1.2
False

这不成问题吗?我在Mac上使用Python2.6.7


Tags: 距离if半径floatintdistance浮点print
1条回答
网友
1楼 · 发布于 2024-06-02 06:41:35

直接比较一下,没有什么坏处。

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是duck类型的,所以一般来说,您根本不必担心类型。

由于precision errors,比较等式的浮点与其他浮点可能会有一些问题:

>>> 0.3+0.3+0.3 == 0.9
False
>>> 0.3+0.3+0.3
0.8999999999999999

但与int和/或<>操作相比,您不必担心。

在您的更新中,我们可以使用^{}模块来显示原因:

>>> Decimal(1.2000000000000001)
Decimal('1.20000000000000017763568394002504646778106689453125')
>>> Decimal(1.20000000000000001)
Decimal('1.1999999999999999555910790149937383830547332763671875')

但这真的重要吗?这是浮点数的固有问题,但只在需要真正高精度的地方才重要。

相关问题 更多 >