<p><a href="https://www.python.org/dev/peps/pep-0485/" rel="nofollow"><strong>PEP 0485</strong></a>引入了<strong><a href="https://docs.python.org/3/library/math.html#math.isclose" rel="nofollow">^{<cd1>}</a></strong>函数(它的复杂表亲<strong><a href="https://docs.python.org/3/library/cmath.html#cmath.isclose" rel="nofollow">^{<cd2>}</a></strong>用于进行此类检查;它还检查特殊值,如<code>NaN</code>,<code>Inf</code>等。<em>明显的缺点是,据我所知,它只出现在<code>Python 3.5</code>中,还处于婴儿期,所以将来可能会做一些整容手术。你知道吗</p>
<p>基本功能:</p>
<pre><code>math.isclose(1, 1.09, abs_tol=0.1)
Out[20]: True
math.isclose(1.0, 1.2, abs_tol=0.1)
Out[23]: False
math.isclose(1.0, 0.9, abs_tol=0.1)
Out[24]: True
</code></pre>
<p>这是一个内置的(因此可以有效地与<code>filter()</code>之类的东西一起使用),用于检查两个数字的接近程度,并允许在尝试寻找近似值时具有更大的灵活性。你知道吗</p>
<p>在内部,它以类似的方式使用<code>abs</code>解决方案,看看<a href="https://hg.python.org/cpython/file/tip/Modules/mathmodule.c#l1994" rel="nofollow"><strong>^{<cd8>} source</strong></a>对于您自己,它很可能是最有效的。(可以在<a href="https://github.com/PythonCHB/close_pep/blob/master/is_close.py" rel="nofollow">^{<cd9>}</a>找到it python的一个版本)</p>
<p>对于较早版本的Python,您可以使用已经指出的解决方案,或者查看<code>math.isclose()</code>是如何实现的,并从中获得灵感。你知道吗</p>
<hr/>
<p>注意,在大多数情况下应该指定<code>rel_tol</code>,除非处理<code>0</code>附近的值。此外,对于需要评估数组元素的情况,最有效的使用可能是由<strong><a href="http://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.isclose.html#numpy-isclose" rel="nofollow">^{<cd13>}</a></strong>函数提供的。你知道吗</p>