【问题标题】:Python Floating point addition test case failing due to precision issue由于精度问题,Python 浮点加法测试用例失败
【发布时间】:2019-07-28 15:53:53
【问题描述】:

我在 python 中定义了一个加法函数,当我使用 python unittest 模块运行单元测试时,浮点加法测试用例失败。是否有任何参考可以轻松处理浮点运算的良好 python 模块。

感谢您帮助解决加法函数的错误,以返回小数点后的非零数字。

我尝试对结果进行四舍五入并运行测试,还尝试将预期结果转换为浮点数。

p3.py

def addition(a,b):
    return a + b

函数的单元测试用例在 p3_test.py 中定义

import unittest
from  p3 import addition

class TestAddition(unittest.TestCase):
    def test_Addition(self):
        self.assertEqual(addition(2, 3), 5)
        self.assertEqual(addition(0, -1), -1)
        self.assertEqual(addition(-1, 0.99), -0.01)

第三个测试用例失败并出现以下错误:

    self.assertEqual(addition(-1, 0.99), float(0.01))
AssertionError: -0.010000000000000009 != 0.01

----------------------------------------------------------------------
Ran 1 test in 0.000s

希望所有测试用例都通过

【问题讨论】:

  • 我认为您有 2 个问题。第一个是 - 1 + 0.99 = - 0.01,而不是 0.01。
  • 感谢 -0.01 Brat 的捕获,我更正了。

标签: python-3.x python-2.7 python-unittest


【解决方案1】:

我了解浮点表示是我的问题的原因,因为我正在寻找一种合适的方法来解决相同的单元测试。我在 unittest 模块中找到了一个近似断言方法来解决这个问题。

这是新的代码。

import unittest
from  p3 import addition

class TestAddition(unittest.TestCase):
    def test_Addition(self):
        self.assertEqual(addition(2, 3), 5)
        self.assertEqual(addition(0, -1), -1)
        self.assertAlmostEqual(addition(-1, 0.99), -0.01, 7)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 2022-11-12
    相关资源
    最近更新 更多