我写了一个简单的atm机程序,但有些输入会导致0.01的差异。代码怎么了?(初学者)

2024-04-25 13:45:58 发布

您现在位置:Python中文网/ 问答频道 /正文

banknotes = [200,100,50,20,10,5,1,0.50,0.25,0.10,0.05,0.01]

amount = float(input("Enter an amount: "))

for i in range (0,len(banknotes)):
    if banknotes[i] <= amount:
        banknote = int(amount // banknotes[i])
        amount = amount - banknote*(banknotes[i])
        print(banknotes[i],"banknotes:",banknote)

例如,当我输入86.74时,程序的行为就像它的86.73。但不知何故,当我输入386.74或几乎任何其他数字时,它工作正常。我真的看不出问题出在哪里,我尝试在线python编译器来查看我的IDE是否有bug,同样的事情也发生了


1条回答
网友
1楼 · 发布于 2024-04-25 13:45:58

正如评论所指出的,浮动比较并不总是准确的。如果使用整数乘以100(将所有内容视为美分并使用整数数学),这不再是一个问题:

banknotes = [20000,10000,5000,2000,1000,500,100,50,25,10,5,1]

# read a floating point into an int, could also just do int(float(input()) * 100)
def parse_input(input_str):
    split = input_str.strip().split(".")
    if len(split) == 2:
        return int(split[0]) * 100 + int(split[1])
    else:
        return int(split[0]) * 100

amount = parse_input(input("Enter an amount: "))

for i in range (0,len(banknotes)):
    if banknotes[i] <= amount:
        banknote = int(amount // banknotes[i])
        amount = amount - banknote*(banknotes[i])
        print("% .2f" % (banknotes[i] / 100,),"banknotes:",banknote)

相关问题 更多 >