我正在尝试运行一个有两个变量的程序,当一个变量等于另一个变量时,它执行一个函数。 在这种情况下,打印spam。 但是,出于某种原因,当我运行此程序时,我没有得到任何输出,即使我知道它们是相等的。
可能重复:
为什么十进制数无法在二进制中精确表示?
程序不进入if语句
g=0.0
b=3.0
while g < 30.0:
if g==b:
print "Hi"
g+=.1
print g, b
我正在尝试运行一个有两个变量的程序,当一个变量等于另一个变量时,它执行一个函数。 在这种情况下,打印spam。 但是,出于某种原因,当我运行此程序时,我没有得到任何输出,即使我知道它们是相等的。
可能重复:
为什么十进制数无法在二进制中精确表示?
程序不进入if语句
g=0.0
b=3.0
while g < 30.0:
if g==b:
print "Hi"
g+=.1
print g, b
你认为将0.0加上足够多的0.1就能得到3.0。但这些是浮点数,它们不精确。舍入误差使得值永远无法完全等于3.0。你几乎永远不应该使用 ==
来测试浮点数。
0.1
加 30 次后,变量 g
的实际值为 3.0000000000000013
。 - Kijewskig = round(g+0.1, 1)
? - inspectorG4dget==
而不是“从不”。 - Eric Postpischilabs(g - b) < epsilon
并且你会得到几乎但又不完全相等的检查,这对大多数情况来说应该已经足够好了。