使用具有浮点值的列表运算符"in"

Hoc*_*Ben 3 python numpy

我有一个带浮点数的列表,每个数字都有3位小数(例如474.259).如果我验证列表中的数字,如下所示:

if 474.259 in list_sample:
    print "something!"
Run Code Online (Sandbox Code Playgroud)

然后显示消息,但如果我从另一个列表中取出数字并将其舍入:

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

第二条消息未显示.

Joh*_*nck 6

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

我建议在这里阅读:http://floating-point-gui.de/并使用"epsilon"容差值进行类似"模糊比较"的操作,只要它们相差小于x%就可以考虑数字相等管他呢.

  • 您应该写"因为计算机中的*真*数字具有本质上不准确的表示"(不是*浮点*):事实上,根据定义,"浮点数"完全由浮点数表示. (3认同)