运行该程序时,
cost = 12
money = 12.51
change = money - cost
dollars = int(change)
change -= dollars
quarters = int(change / 0.25)
change -= quarters * 0.25
dimes = int(change / 0.1)
change -= dimes * 0.1
nickels = int(change / 0.05)
change -= nickels * 0.05
pennies = int(change / 0.01)
print("""Your change is:
%i dollars
%i quarters
%i dimes
%i nickels
%i pennies
""" % (dollars, quarters, dimes, nickels, pennies))
输出为
Your change is:
0 dollars
2 quarters
0 dimes
0 nickels
0 pennies
为什么便士是 0?我尝试过单独打印便士,同样的事情发生了。我也确信 change/0.01
等于 1.0
。由于某种原因,int(1.0)
似乎等于0
。显然,事实并非如此。也许 1.0
是一个 float ,实际上不是 1,而是被下限为 0
?
旁注:删除便士上的 int 函数并用 %.0f pennies
替换是可行的。
我想这正是人们所说的在处理金钱时不要使用 float 时所说的内容。 :)
最佳答案
I know for certain as well that change / 0.01 is equal to 1.0
嗯,不完全是。如果您尝试直接从 Python 解释器执行 change/0.01
操作,由于浮点错误,它会返回类似 0.99999999999787
的内容。当然,如果您尝试将其转换为 int,它会向下舍入为零。
为了避免这种情况,您可以尝试以下两种方法之一。您可以尝试使用 decimal Python 中的模块,它确实避免了此类浮点错误,或者您可以在开始时将 change
乘以 100,这样您处理的是整数值,而不是 float ,并修改其余的相应的代码。
关于python - python 中 int(x) 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18158471/