gpt4 book ai didi

python - 在 Python 中比较 float 和 int

转载 作者:行者123 更新时间:2023-11-28 19:40:31 29 4
gpt4 key购买 nike

我正在尝试查看计算出的两点之间的距离是否小于给定的半径,如下所示:

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

此处 distance 将有效地返回一个 floatradius 是一个 int

我知道我不应该直接比较 float ,而应该与阈值进行比较。鉴于此,是否有更好的方法来检查 float 是否小于 int(或另一个 float)。

更新从所有回复来看,这种比较似乎没问题。但我确实观察到这一点:

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

这不是问题吗?我在 Mac 上使用 Python 2.6.7

最佳答案

直接比较,没什么坏处。

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,将 float 与其他 float 进行相等比较可能会出现一些问题:

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

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

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

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

但这真的重要吗?这是 float 的固有问题,但仅在您需要非常高的精度时才重要。

关于python - 在 Python 中比较 float 和 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10037115/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com