擅长:python、mysql、java
<p>您将<em>二进制</em>浮点与<em>十进制</em>浮点混淆。从<a href="https://docs.python.org/3/library/decimal.html" rel="nofollow noreferrer">module documentation</a>开始:</p>
<blockquote>
<p>The decimal module provides support for fast correctly-rounded <strong>decimal</strong> floating point arithmetic.</p>
<p>[...]</p>
<ul>
<li>Decimal numbers can be represented exactly. In contrast, numbers like 1.1 and 2.2 do not have exact representations in <strong>binary</strong> floating point</li>
</ul>
</blockquote>
<p>(我的粗体强调)</p>
<p>浮点方面是指指数的可变性;数字<code>12300000</code>可以表示为123,十进制指数为5(10**5)。<code>float</code>和<code>decimal</code>都使用浮点表示。但是<code>float</code>加上许多二进制分数(1/2+1/4+1/8+1/16+…),而<em>使得它们不适合以二进制分数表示货币,因此不能精确地建模1/100或1/10,因为货币值往往使用很多</p>
<p>{a2}you链接还向您介绍Java{a3}。Python的<code>decimal</code>本质上是相同的东西<em>;当<code>BigDecimal</code>文档讨论值<em>由任意精度整数未标度值和32位整数标度</em>组成时,<em>标度</em>基本上是浮点的位置</p>
<p>因为<code>decimal</code>可以精确地表示货币值的百分之一(美分),所以它更适合对货币值进行建模</p>