如何检索丢失的号码?收银机 - 确定适当的更改

时间:2018-01-31 20:14:25

标签: python

我已经编写过这个程序,但是当我运行它时,我会被一分钱缩短。 (问题在最底层)

我的导师说这很好,因为我们还没有学会添加到字符串中的内容(?)以防止发生这种情况,但是我们可以尝试找出要添加的内容。

问题在于:

price=float(input("What is the price of the item?"))
tax=round(price*0.0725,2)
grandTotal=price+tax
tendered=float(input("How much money did customer give you?"))

print(format("The price of the item is $","26"), format(price,"6.2f"))
print(format("The tax on the item is","26"), format(tax, "6.2f"))
print(format("The total cost is","26"), format(grandTotal, "6.2f"))
print(format("You tendered","26"), format(tendered, "6.2f"))
change=tendered-grandTotal
print(format("Your change is","26"), format(change, "6.2f"))

计算变更细目

penny=int(change*100)    #transform change into pennies

dollars=penny//100       #how many dollars are there
pennyleft= penny%100     #remainder operator to find how many pennies are left

quarters= pennyleft//25 #number of quarters
pennyleft=pennyleft%25  #remainder operator to find how many pennies are left

dimes=pennyleft//10     #number of dimes
pennyleft=pennyleft%10

nickels=pennyleft//5    #number of nickels
pennyleft=pennyleft%5

pennies=pennyleft//1    #number of pennies
pennyleft=pennyleft%1
print("Your change is:")
print( format(dollars, "5"), "dollar bills,") 
print( format(quarters, "5"), "quarters,")
print( format(dimes, "5"), "dimes,")
print( format(nickels, "5"), "nickels, and")
print( format(pennies, "5"), "pennies.") 

这是输出;     该商品的价格是多少?5.00     你应该欠5.36美元     客户给你多少钱?10.00     该商品的价格是5.00美元     该项目的税金为0.36     总费用为5.36     你招标10.00     你的变化是4.64     你的改变是:       4美元的钞票,       2季度,       1角钱,       0个镍币,和       3便士。

所以我的问题是3便士应该是4.有关如何解决此问题的任何建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您正在处理浮点数,因此结果可能比您预期的要多一点或多少。并非所有浮点数都可以完全存储在计算机中。这可能听起来令人惊讶,但它与通常的十进制系统没有什么不同。毕竟,你不能存储"也是十进制数的1/3!它将是0.3333333...(为了清晰起见而省略了3,并且缺少存储空间。

如果你通过打印出更多的小数来测试你得到的值,你会发现这一行

print(format("Your change is","26"), format(change, "6.20f"))

显示

Your change is             4.63999999999999968026

并且,因为int(x)总是向下舍入(更具体地说,"截断为零"(documentation)),下一行

penny=int(change*100)

仅截止多余的小数,因此您最终得到463。在此之后,该数字将转换为整数,因此不会发生进一步的浮点故障 - 但为时已晚。

要获得正确的计算,您所要做的就是添加另一个round

penny=int(round(change*100))    #transform change into pennies

这将偿还丢失的便士。