gpt4 book ai didi

Python 计算大于等于的数字

转载 作者:太空狗 更新时间:2023-10-29 20:43:50 25 4
gpt4 key购买 nike

我目前正在学习 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 的硬币。

Bitte gebe einen Euro Betrag ein: 17.79
[10, 5, 2, 0.5, 0.2, 0.05, 0.02, 0.01]

为什么?这与圆形有关吗?

最佳答案

对于货币计算,如果可以,最好避免使用 float 类型,因为会累积舍入误差。你可以用类似这样的方式来做:

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]

我还将变量名从 sum 更改为 amount - sum 将隐藏 sum内置函数。

结果:

Bitte gebe einen Euro Betrag ein: 17.79
[10.0, 5.0, 2.0, 0.5, 0.2, 0.05, 0.02, 0.02]

或者,您可以在没有内部 while 循环的情况下实现它,如下所示:

for cent in cents:
n = int(math.floor(amount / cent))
amount -= n * cent
coins += [cent] * n

可以提前退出循环(if not amount: break)并避免不必要的操作(if not n: continue),但为了可读性我省略了这些守卫。

另一种可能的替代方法是使用 decimal数据类型。

关于Python 计算大于等于的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20868522/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com