Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有'places'的python unittest2 AssertalPosteQual工作不正确_Python_Unittest2 - Fatal编程技术网

带有'places'的python unittest2 AssertalPosteQual工作不正确

带有'places'的python unittest2 AssertalPosteQual工作不正确,python,unittest2,Python,Unittest2,我正在用unittest2处理以下问题: assertAlmostEqual(69.88, 69.875, places=2) # returns True 但是 我认为问题在于assertAlmostEqual方法: def assertAlmostEqual(self, first, second, places=None, ...): if first == second: # shortcut return ... if del

我正在用
unittest2
处理以下问题:

assertAlmostEqual(69.88, 69.875, places=2)  # returns True
但是

我认为问题在于
assertAlmostEqual
方法:

def assertAlmostEqual(self, first, second, places=None, ...):
    if first == second:
        # shortcut
        return
    ...
    if delta is not None:
    ...
    else:
        if places is None:
            places = 7

        if round(abs(second-first), places) == 0:
            return

    ...
    raise self.failureException(msg)
应改为:

if abs(round(second, places) - round(first, places)) == 0
    return

正如您可以轻松演示的那样,您建议的修复不会产生任何影响:

>>> places = 2
>>> first, second = 69.88, 69.875
>>> round(abs(second-first), places)
0.0
>>> abs(round(second, places) - round(first, places))
0.0
这是浮点精度的一个问题,例如,
69.88
无法准确表示:

>>> "{:.40f}".format(69.88)
'69.8799999999999954525264911353588104248047'

第二个例子的区别是

0.005

即使没有提到浮点的偏差,四舍五入的结果也是0.01,所以这些数字在两位精度上确实不同

此方法比较数字之间的差异。这实际上是比较浮点数的一种标准

所以问题不在于实现,而在于您的期望,这与常见的浮点比较不同

>>> "{:.40f}".format(69.88)
'69.8799999999999954525264911353588104248047'