0
change_owed = input("Please enter an amount of change?")
while change_owed == "":
    change_owed = input("Please enter an amount of change?")
change_owed = float(change_owed)

q = .25
d = .10
n = .05
c = .01

numberQ = (change_owed - (change_owed % q))/q
change_owed_2 = change_owed % q
numberD = (change_owed_2 - (change_owed_2 % d))/d
change_owed_3 = change_owed_2 % d
numberN = (change_owed_3 - (change_owed_3 % n))/n
change_owed_4 = change_owed_3 % n
numberC = (change_owed_4 - (change_owed_4 % c))/c
print(numberQ)
print(numberD)
print(numberN)
print(numberC)

Hi everyone. This is my code to calculate change. When I run the program and put an amount of 0.41 I get 3 as output. This is not true, because it has to be 4. I have to round my input to the nearest cent. How do I edit this code, so every print is rounded.

Kariem
  • 35
  • 3

2 Answers2

0

Round the change owed to 2 decimal places at every step, and round the number of coins to an integer.

numberQ = round((change_owed - (change_owed % q))/q)
change_owed_2 = round(change_owed % q, 2)
numberD = round((change_owed_2 - (change_owed_2 % d))/d)
change_owed_3 = round(change_owed_2 % d, 2)
numberN = round((change_owed_3 - (change_owed_3 % n))/n)
change_owed_4 = round(change_owed_3 % n, 2)
numberC = round((change_owed_4 - (change_owed_4 % c))/c)
Barmar
  • 741,623
  • 53
  • 500
  • 612
0

You could convert everything to integer by multiplying with 100 when doing %:

change_owed = 0.41

q = .25
d = .10
n = .05
c = .01

def mod_100(a, b):
    return (100 * a) % (100 * b) / 100

numberQ = round((change_owed - mod_100(change_owed, q))/q)
change_owed_2 = mod_100(change_owed, q)
numberD = round((change_owed_2 - mod_100(change_owed_2, d))/d)
change_owed_3 = mod_100(change_owed_2, d)
numberN = round((change_owed_3 - mod_100(change_owed_3, n))/n)
change_owed_4 = mod_100(change_owed_3, n)
numberC = round((change_owed_4 - mod_100(change_owed_4, c))/c)
print(numberQ)
print(numberD)
print(numberN)
print(numberC)
1
1
1
1
Z Li
  • 4,133
  • 1
  • 4
  • 19