我正在python中创建一个更改程序。用户必须输入一个美元金额,然后程序将计算二十,十,五,一,四分之一,硬币,镍币和便士的变化。我被指示使用圆形功能来赚钱,因为如果我输入58.79美元的金额,程序会告诉我当它应该是4时给3便士。有没有办法把这些便士弄圆?
我知道一分钱的价值是.01,但是python将其读作.100000000001,我认为这是问题所在。
感谢任何帮助,这是我需要四舍五入的部分:
# get the amount to change from the user
change = input("Please enter the amount to change: $")
print "To make change for $",change,"give the customer back:"
# calculate number of twenties
twenties = int(change/ 20)
print twenties, "twenties"
change = change - twenties *20
# calculate tens
tens = int(change / 10)
print tens, "tens"
change = change - tens *10
#calculate fives
fives = int(change / 5)
print fives, "fives"
change = change - fives *5
#calculate ones
ones = int(change / 1)
print ones, "ones"
change = change - ones * 1
#calculate quarters
quarters = int(change / .25)
print quarters, "quarters"
change = change - quarters * .25
#calculate dimes
dimes = int(change / .10)
print dimes, "dimes"
change = change - dimes * .10
#calculate nickels
nickels = int(change / .05)
print nickels, "nickels"
change = change - nickels * .05
#calculate pennies
pennies = int(change / .01)
print pennies, "pennies"
答案 0 :(得分:3)
将用户输入的美元值乘以100,转换为int,并以便士为单位。
整数算术很简单(而且准确)。浮点运算很棘手,迫使你使用更多脑细胞:)。保存脑细胞,完全以整数运作。
答案 1 :(得分:2)
问题在于0.01
无法准确表示为二进制浮点值(这是正常float
的存储方式 - 对于任何语言都是如此,而不仅仅是Python)。因此,如果您需要美元和美分的确切值,则可以使用decimal module。这样,您可以确保您的值将精确舍入。
或者(因为这里的小数可能过大),首先将每个美元值乘以100 (由于上述原因,这与除以0.01不同!),转换为{{1} },做你的计算,除以100。
答案 2 :(得分:1)
答案 3 :(得分:1)
您遇到的问题是浮点运算不精确的结果。在IEEE浮点中无法精确表示0.01。这是使用货币时不使用浮动的一个原因。
您应该使用小数甚至整数,因为您知道小数点后最多有2位数。在这种情况下,只需用便士的金额来工作。
关于问题本身,我认为最简单的方法是将美元金额转换为便士金额,然后迭代预定义的值列表,其中包含每个等价金额(按降序排列)面额:
def change(amount):
# this can be removed if you pass the amount in pennies
# rather than dollars
amount = int(round(amount*100))
values = [2000, 1000, 500, 100, 25, 10, 5, 1]
denom = ['twenties', 'tens', 'fives', 'ones', 'quarters', 'dimes', 'nickels', 'pennies']
for i in range(len(values)):
num = amount / values[i]
amount -= num * values[i]
print str(num) + " " + denom[i]
现在调用change(58.79)
将打印
2 twenties
1 tens
1 fives
3 ones
3 quarters
0 dimes
0 nickels
4 pennies
答案 4 :(得分:0)
>>> from math import ceil
>>> a = 58.79
>>> ceil(a % 0.05 * 100)
4.0
>>>
[编辑]
现在我想起来了,不妨跟着
>>> a = 58.79
>>> a*100 % 5
4.0