2

运行这个程序时,

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是一个浮点数,实际上不是 1 并被限制为0

旁注:删除便士上的 int 函数并替换为%.0f pennies作品。

我想这正是人们说在处理金钱时不要使用浮点数时所说的。:)

4

3 回答 3

2

我也确定 change / 0.01 等于 1.0

嗯,不完全是。如果您尝试change / 0.01直接从 Python 解释器执行,它会返回类似于0.99999999999787浮点错误的结果。自然,如果您尝试将其转换为 int,它将向下舍入为零。

为避免这种情况,您可以尝试以下两种方法之一。您可以尝试使用 Python 中的decimal模块,它确实可以避免此类浮点错误,或者您可以change在一开始就乘以 100,以便处理整数值,而不是浮点数,然后修改其余部分相应地编码。

于 2013-08-10T04:04:54.130 回答
0

我完成的代码:

cost = input("What is the cost in dollars? ")
money = input("Money given: ")
change = int(round(money - cost) * 100)

if change < 0:
    print("You didn't pay enough!")
    exit()

dollars = change / 100
change %= 100

quarters = change / 25
change %= 25

dimes = change / 10
change %= 10

nickels = change / 5
change %= 5

pennies = change

print("""Your change is:
    %i dollars
    %i quarters
    %i dimes
    %i nickels
    %i pennies
""" % (dollars, quarters, dimes, nickels, pennies))
于 2013-08-10T04:29:53.373 回答
0

%.0f对数字进行四舍五入,%i而不这样做。还有,学数学!

于 2016-01-08T21:09:26.233 回答