在Python中,如何评估两个数字是否足够接近?
我有两个号码- 3.125000兆字节和2.954880兆字节 我想对它们进行比较,结果应该是真的,因为它们几乎是3兆字节。在Python3中我如何做到这一点 我试着做数学。isclose3.125000,2.954880,abs_tol=0.1 但是,返回False。我真的不明白怎么把宽容放在这里在Python中,如何评估两个数字是否足够接近?,python,python-3.x,floating-point,floating-point-comparison,Python,Python 3.x,Floating Point,Floating Point Comparison,我有两个号码- 3.125000兆字节和2.954880兆字节 我想对它们进行比较,结果应该是真的,因为它们几乎是3兆字节。在Python3中我如何做到这一点 我试着做数学。isclose3.125000,2.954880,abs_tol=0.1 但是,返回False。我真的不明白怎么把宽容放在这里 math.isclose(3.125000,2.954880, abs_tol=0.1). 我正在使用Python 3.5.2 预期结果是正确的。 实际结果是假的。< P>你的绝对公差设置为0
math.isclose(3.125000,2.954880, abs_tol=0.1).
我正在使用Python 3.5.2
预期结果是正确的。
实际结果是假的。< P>你的绝对公差设置为0.1,所以差值必须小于0.1,以考虑它们相等;3.125000-2.954880四舍五入为0.17012,这太大了 如果您想让他们被认为是接近的,请稍微增加您的容忍度,例如:
math.isclose(3.125000, 2.954880, abs_tol=0.2)
根据您的期望返回true。 您的绝对公差设置为0.1,因此差值必须小于0.1,以考虑它们相等;3.125000-2.954880四舍五入为0.17012,这太大了 如果您想让他们被认为是接近的,请稍微增加您的容忍度,例如:
math.isclose(3.125000, 2.954880, abs_tol=0.2)
函数math.isclose实际上是用来处理浮点不精确性的。您可以将其用于此目的,但需要对其进行适当调整:示例中的数字之间的间隔大于0.1
如果您不担心浮点不精确性,比较它们的更好方法是显而易见的:
def equivalent(a, b):
return abs(a-b) < 0.1
函数math.isclose实际上用于处理浮点不精确性。您可以将其用于此目的,但需要对其进行适当调整:示例中的数字之间的间隔大于0.1
如果您不担心浮点不精确性,比较它们的更好方法是显而易见的:
def equivalent(a, b):
return abs(a-b) < 0.1
它同时使用这两种方法,但如果满足任一阈值,则认为接近;通过0.1的绝对值大致相当于您所写的值,但也会使真正巨大的数字与较小的相对差异被视为接近。@ShadowRanger Yep,当我看到您的答案时意识到了我的错误。编辑以避免误导OP。它使用两者,但如果满足任一阈值,则视为接近;通过0.1的绝对值大致相当于您所写的值,但也会使真正巨大的数字与较小的相对差异被视为接近。@ShadowRanger Yep,当我看到您的答案时意识到了我的错误。编辑以避免误导OP。差值大于0.1,因此不够接近。差值大于0.1,因此不够接近。