比较挤压中的2个浮点值

2024-09-28 05:22:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图比较两个值(浮动)使用挤压,它有时工作良好,但失败几次。这是非常不一致的。有人能帮助我如何使用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")

Tags: sampletextidfloat浮点set剧本round
2条回答

查看documentation for ^{}

math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)
Return True if the values a and b are close to each other and False otherwise.

另请注意底部:

New in version 3.5.

所以您应该确保运行的是python3.5+来使用函数。但话说回来,你要做的就是传递你的价值观。浮点算术错误的标准示例通常是添加0.1 + 0.2

>>> 0.1 + 0.2
0.30000000000000004

因此,如果我们检查该计算是否等于0.3

^{pr2}$

使用新的math.isclose()函数,我们可以纠正:

>>> import math
>>> math.isclose(0.1 + 0.2, 0.3)
True

在Python3.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传递一个值。在

一般来说,您所尝试的应该是有效的,但是由于缺少信息,因此无法找出您在使用上述代码时遇到的特定问题。在

下面是一个挤压测试脚本示例(用于Windows的Squish,您似乎在使用它),它可以满足您对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))

请注意,这个测试脚本是针对python3.5.x的,因为数学.isclose(),因此它不能像python2.7.x附带的那样使用默认的压缩二进制软件包(请与sqush技术支持人员联系以获得具有不同Python版本的压缩二进制软件包)。在

相关问题 更多 >

    热门问题