作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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
这是浮点精度的问题,请参见例如Is floating point math broken? 69.88
无法准确表示:
>>> "{:.40f}".format(69.88)
'69.8799999999999954525264911353588104248047'
关于pythonunittest2assertAlmostEqual 与 `places` 工作不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28696783/
使用 python 2.6.6 的 unittest 模块,如何在所有测试运行后调用代码? 请考虑以下 MCVE: #!/bin/env python import unittest def setU
我是一名优秀的程序员,十分优秀!