我现在正在学习Python(2.7),一个练习说要编写一个程序来计算您需要支付多少硬币来支付特定的金额。 我的解决方案是:
sum = input("Bitte gebe einen Euro Betrag ein: ")
coins = []
euro = [20,10,5,2,1,0.5,0.2,0.1,0.05,0.02,0.01]
for i in euro:
while sum >= i:
sum -= i
coins.append(i)
print coins
这几乎可以工作了,但是当我输入例如17,79,它会给我17,78的硬币。在
^{pr2}$为什么?这和圆形有关吗?在
是的。如果在执行代码后检查“sum”值,就会得到类似0009999999999133这样的值,它比最小的硬币还小。在
我的建议?做任何事都要分文!在
对于货币计算,最好尽量避免
float
类型,因为会累积舍入误差。您可以用类似的方法进行操作:我还将变量名从} 内置函数。在
sum
更改为amount
-sum
将隐藏^{结果:
^{pr2}$或者,您可以在不使用内部
while
循环的情况下实现此操作,如下所示:可以提前退出循环(
if not amount: break
)并避免不必要的操作(if not n: continue
),但为了可读性,我省略了这些保护。在另一个可能的替代方法是使用^{} 数据类型。在
这是一个与
float
精度有关的问题。经过计算,我得到:也就是说,比一欧元美分稍微少一点(注意,你不应该叫它
^{pr2}$sum
,因为这样你就隐藏了内置的sum
函数,并且不能使用sum(coins)
来计算总数)。你可以用一种宽容的方法来解决这个问题与
同样,最好使用公差来比较浮动,而不是:
使用
相关问题 更多 >
编程相关推荐