В основном это работает почти для всех случаев, которые я пробовал, кроме 0.93. Затем я добавил «печатать деньги» в то время цикла, чтобы посмотреть, что он делает после каждого цикла, и это было то, что случилось:Объяснение вывода моего кода на Python
Enter an amount less than a dollar: 0.93
0.68
0.43
0.18
0.08
0.03
0.02
0.01
3.81639164715e-17
-0.01
Your change is 3 quarters 1 dimes 1 nickels 4 pennies
Может кто-нибудь объяснить, что, черт возьми, происходит?
money = input("Enter an amount less than a dollar: ")
quarter = 0
dime = 0
nickel = 0
penny = 0
while money > 0.00:
if money >= 0.25:
quarter = quarter + 1
money = money - 0.25
elif money >= 0.10:
dime = dime+1
money = money - 0.10
elif money >= 0.05:
nickel = nickel + 1
money = money - 0.05
else:
penny = penny + 1
money = money - 0.01
print "Your change is %d quarters %d dimes %d nickels %d pennies" % (quarter, dime, nickel, penny)
Я согласен с рекомендацией использовать арифметику целочисленной арифметики или десятичной дроби для денег. Однако, если вы действительно хотите понять основную проблему с использованием плавающей запятой, прочитайте [Что каждый компьютерный ученый должен знать о арифметике с плавающей точкой] (http://docs.oracle.com/cd/E19957-01/806-3568 /ncg_goldberg.html) –