我试图使用压扁比较2个值(浮点数),它有时可以正常工作,但几次失败。这是非常不一致的。有人可以帮助我如何使用isclose
来比较浮动值。
以下是我的剧本:
Xposition_set = waitForObject("{id='textBoxGoto_Sample_X'}").text
Xposition_setValue = round(float(Xposition_set), 2)
Xposition_displayed = waitForObject("{id='dbxX' nativeObject.DataContext.Name='" + str(positionList[Index])+ "'}").text
Xposition_displayedValue = round(float(Xposition_displayed), 2)
test.compare(Xposition_setValue, Xposition_displayedValue, GetTestCaseNumber() + "X -Positions matches")
答案 0 :(得分:0)
您正在尝试的应该是一般的,但由于缺少信息,您无法找到上述代码遇到的特定问题。
这是一个Squish测试脚本示例(对于Squish for Windows,您似乎使用它),它可以满足您对Squish Addressbook示例的要求:
import os
import math
def main():
startApplication("%s/examples/win/addressbook/Addressbook" % os.getenv("SQUISH_PREFIX"))
o = waitForObject("{type='Window'}")
# Obtaining fake value 1:
o.nativeObject.Text = "1.0"
v1 = round(float(o.nativeObject.Text), 2)
# Obtaining fake value 2:
o.nativeObject.Text = "2.0"
v2 = round(float(o.nativeObject.Text), 2)
# Pass:
test.verify(math.isclose(v1, v2, abs_tol=1))
# Fail on purpose:
test.verify(math.isclose(v1, v2, abs_tol=0.9))
请注意,由于math.isclose(),此测试脚本适用于Python 3.5.x,因此它不能使用默认的Squish二进制包,因为它们附带Python 2.7.x(联系Squish技术支持)获取具有不同Python版本的Squish二进制包。)
答案 1 :(得分:0)
查看documentation for math.isclose()
:
数学。 isclose ( a,b,*,rel_tol = 1e-09,abs_tol = 0.0 )
如果值 a 和 b 彼此接近,则返回True
,否则返回False
。
另请注意:
版本3.5中的新内容。
因此,您应确保运行Python 3.5+以使用该功能。但话说回来,你需要做的就是传递你的价值观。浮点算术错误的标准示例通常是添加0.1 + 0.2
:
>>> 0.1 + 0.2
0.30000000000000004
因此,如果我们检查该计算是否等于0.3
:
>>> 0.1 + 0.2 == 0.3
False
使用新的math.isclose()
功能,我们可以解决这个问题:
>>> import math
>>> math.isclose(0.1 + 0.2, 0.3)
True
在Python 3.5之前,您可以手动执行此操作。您只想检查两个数字之间的绝对差异是否非常小。 math.isclose()
的默认容差为1e-09
,因此我们可以使用:
>>> abs(0.1+0.2 - 0.3) < 1e-9
True
事实上,这两个花车之间的差异远远小于甚至:
>>> abs(0.1+0.2 - 0.3)
5.551115123125783e-17
因此,您可以使用更强的阈值,用于手动检查或使用math.isclose()
并传入rel_tol
的值。