Pytest 如何断言浮点数近似相等(assertAlmostEqual)?

浮点数断言用 pytest.approx:assert result == pytest.approx(3.14, rel=1e-3)。支持绝对/相对误差、列表与字典。计算可能有舍入误差时应按业务容差比较。本文给出用法与误差参数。

最佳实践
Pytest 如何断言浮点数近似相等(assertAlmostEqual)?封面

用 pytest.approx:assert result == pytest.approx(3.14159, rel=1e-3)——浮点运算有精度误差,当计算可能引入舍入误差时,应按业务容差比较;可精确表示的结果并非必然比较失败。

基本用法

import pytest

def test_calculation():
    result = 0.1 + 0.2
    assert result == pytest.approx(0.3)          # 默认相对容差 1e-6,绝对容差 1e-12,两者满足其一即可

# 自定义误差
assert value == pytest.approx(3.14, rel=1e-2)  # 相对误差 1%
assert value == pytest.approx(3.14, abs=0.01)  # 只指定 abs 时仅使用绝对容差 0.01

容器也支持

assert [1.1, 2.2] == pytest.approx([1.1, 2.2])
assert {'pi': 3.14159} == pytest.approx({'pi': 3.14}, rel=1e-3)
import numpy as np
assert np.array([1.0, 2.0]) == pytest.approx(np.array([1.0, 2.0]))

unittest 传统写法

self.assertAlmostEqual(result, 3.14, places=2)   # 把两数差值 round 到 2 位后为零,不是分别舍入后比较
self.assertAlmostEqual(result, 3.14, delta=0.01) # 或差值

常见问题(FAQ)

Q:approx 能断言不等吗? 可用 assert x != pytest.approx(y)。

Q:NaN 怎么处理? pytest.approx(float('nan'), nan_ok=True)。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台