繁体   English   中英

如何找回遗失的号码?现金收款机-确定适当的更改

[英]How do I retrieve a missing number?Cash register- determine the appropriate change

我已经编写了该程序,但是运行该程序时,我却损失了一分钱。 (问题在最底层)

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

这是问题所在:

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/3 这将是0.3333333... (为清楚起见和缺少存储空间,将无限量省略3 s)。

如果通过打印更多的小数位数来测试所获得的值,则会发现这一行

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

表演

Your change is             4.63999999999999968026

并且,由于int(x)总是四舍五入(更具体地说,它“截断为零”( 文档 )),因此下一行

penny=int(change*100)

只会截去多余的小数,因此您得到463 此后,该数字将转换为整数,因此不会再发生浮点错误了-但是为时已晚。

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

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

这将弥补损失的一分钱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM