使用带浮点值的列表运算符“ in”


问题内容

我有一个带有浮点数的列表,每个数字带有3个小数(例如474.259)。如果我像这样验证清单中的数字:

if 474.259 in list_sample:
    print "something!"

然后会显示该消息,但是如果我从另一个列表中提取该数字并四舍五入,则:

number = other_list[10]
number = round(number, 3)
if number == 474.259:
    print "the numbers are same!"
if number in list_sample:
    print "something!"

第二条消息未显示。


问题答案:

比较浮点数以获得完全相等通常不会做您想要的。这是因为计算机中的浮点数具有一种表示形式(存储格式),这种表示形式对于许多实数本质上是不准确的。

我建议在这里阅读:http : //floating-point-
gui.de/
并使用“
epsilon”公差值进行“模糊比较”之类的事情,以使数字相等,只要它们之间的差异小于x%管他呢。