擅长:python、mysql、java
<p>Python数学本身不能处理任意精度。如果您想得到更精确的结果,似乎需要使用<code>decimal</code>模块,即使这样,也要小心:</p>
<pre><code>from decimal import *
x = Decimal(1000000000)
y = Decimal(1e-6)
z = x+y
z
##>> Decimal(1000000000.00000100000000000)
w = z-x
w
##>> Decimal(0.000001000000000000)
## however, when I tried:
bad_x = Decimal(1000000000 + 1e-6)
bad_x
##>> Decimal(1000000000.0000009992934598234592348593458)
</code></pre>
<p><code>bad_x</code>变成“错误”值的原因是它首先对<code>1000000000</code>和<code>1e-6</code>进行了常规的ython加法,这就遇到了浮点问题,然后取了那个(错误的)值并将其传递给<code>Decimal</code>——损害已经造成了。你知道吗</p>
<p>对于您的用例,看起来您可以在加/减之前将值转换成<code>Decimal</code>s<em>,因此您应该可以毫无问题地获得所需的结果。你知道吗</p>