擅长:python、mysql、java
<p>事实上,<code>n</code>是正确的,但是<code>math.log10()</code>对<strong>浮点数有效,而不是整数,因此存在舍入错误,尽管我不确定确切位置。另见:<a href="https://stackoverflow.com/q/588004/4518341">Is floating point math broken?</a></p>
<p>顺便说一句,你偏离了一个数量级:10^17,而不是10^18</p>
<pre><code>>>> n = 99999999999999999
>>> n
99999999999999999
>>> math.log10(n)
17.0
>>> float(n)
1e+17
</code></pre>
<p>要最终解决此问题,请参见<a href="https://stackoverflow.com/q/11522933/4518341">Is floating point arbitrary precision available?</a>,例如:</p>
<pre><code>>>> from decimal import Decimal
>>> d = Decimal(10**17-1)
>>> d
Decimal('99999999999999999')
>>> d.log10()
Decimal('16.99999999999999999565705518')
>>> int(d.log10())
16
</code></pre>