gpt4 book ai didi

python - int(x) 在 python 中的奇怪行为

转载 作者:太空宇宙 更新时间:2023-11-04 03:56:26 25 4
gpt4 key购买 nike

运行这个程序时,

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 - int(x) 在 python 中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18158471/

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