【问题标题】:How to evaluate whether two number are close enough or not in Python?如何在 Python 中评估两个数字是否足够接近?
【发布时间】:2019-08-18 12:43:53
【问题描述】:

我有两个号码 -

3.125000 MB 和 2.954880 MB。

我想比较它们,它应该返回 True,因为它们几乎是 3Mbytes。我如何在 Python3 中这样做。

我试着做math.isclose(3.125000,2.954880, abs_tol=0.1)

但是,这会返回 False。我真的不明白如何把宽容放在这里。

math.isclose(3.125000,2.954880,  abs_tol=0.1). 

https://docs.python.org/3/library/math.html

math.isclose(a, b, *, rel_tol=1e-09, abs_tol=0.0)

我正在使用 Python 3.5.2。

预期结果是True。 实际结果是False

【问题讨论】:

  • 相差大于0.1,所以不够“接近”。

标签: python python-3.x floating-point floating-point-comparison


【解决方案1】:

您的绝对容差设置为0.1,因此差值必须小于0.1 才能认为它们相等; 3.125000 - 2.954880 是(四舍五入)0.17012,太大了。

如果您希望他们被视为close,请稍微增加您的容忍度,例如:

math.isclose(3.125000, 2.954880, abs_tol=0.2)

如您所愿返回True

【讨论】:

    【解决方案2】:

    函数math.isclose 真正用于处理浮点不精确。你可以使用它,但你需要适当地调整它:你的例子中的数字超过了0.1

    如果您不担心浮点不精确,比较它们的更好方法是显而易见的:

    def equivalent(a, b):
        return abs(a-b) < 0.1
    

    【讨论】:

    • 两者都使用,但如果满足其中一个阈值,则视为“关闭”;通过 abs_tol 的 0.1 大致相当于您写的内容,但允许真正巨大的数字与较小的相对差异也被视为接近。
    • @ShadowRanger 是的,当我看到你的回答时意识到我的错误。编辑以免误导 OP。
    猜你喜欢
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多