擅长:python、mysql、java
<p>对于货币计算,最好尽量避免<code>float</code>类型,因为会累积舍入误差。您可以用类似的方法进行操作:</p>
<pre><code>amount= input("Bitte gib einen Euro Betrag ein: ")
coins = []
cents = [2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1]
amount = int(float(amount) * 100)
for cent in cents:
while amount >= cent:
amount -= cent
coins.append(cent)
print [coin / 100.0 for coin in coins]
</code></pre>
<p>我还将变量名从<code>sum</code>更改为<code>amount</code>-<code>sum</code>将隐藏<a href="http://docs.python.org/2/library/functions.html#sum" rel="nofollow">^{<cd2>}</a>内置函数。在</p>
<p>结果:</p>
^{pr2}$
<p>或者,您可以在不使用内部<code>while</code>循环的情况下实现此操作,如下所示:</p>
<pre><code>for cent in cents:
n = int(math.floor(amount / cent))
amount -= n * cent
coins += [cent] * n
</code></pre>
<p>可以提前退出循环(<code>if not amount: break</code>)并避免不必要的操作(<code>if not n: continue</code>),但为了可读性,我省略了这些保护。在</p>
<p>另一个可能的替代方法是使用<a href="http://docs.python.org/2/library/decimal.html" rel="nofollow">^{<cd9>}</a>数据类型。在</p>