我已经编写过这个程序,但是当我运行它时,我会被一分钱缩短。 (问题在最底层)
我的导师说这很好,因为我们还没有学会添加到字符串中的内容(?)以防止发生这种情况,但是我们可以尝试找出要添加的内容。
问题在于:
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.有关如何解决此问题的任何建议吗?
谢谢!
答案 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
这将偿还丢失的便士。