![](/img/trans.png)
[英]Python Unittest2 - avoid including a TestCase in discover()
[英]python unittest2 assertAlmostEqual with `places` works incorrectly
我正在用unittest2
处理以下问题:
assertAlmostEqual(69.88, 69.875, places=2) # returns True
但
assertAlmostEqual(1.28, 1.275, places=2) # returns False
我认为问题出在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,所以这些数字确实在2位精度上有所不同
此方法比较数字之间的差异。 实际上是比较浮点数的一种标准
因此,问题不在于实现,而在于您的期望,这与常见的浮动比较有所不同
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.