# Odd behavior of int(x) in python

 Refresh December 2018 Views 164 time
2

When running this program,

``````cost = 12
money = 12.51
change = money - cost

dollars = int(change)
change -= dollars

quarters = int(change / 0.25)
change -= quarters * 0.25

dimes = int(change / 0.1)
change -= dimes * 0.1

nickels = int(change / 0.05)
change -= nickels * 0.05

pennies = int(change / 0.01)

%i dollars
%i quarters
%i dimes
%i nickels
%i pennies
""" % (dollars, quarters, dimes, nickels, pennies))
``````

The output is

``````Your change is:
0 dollars
2 quarters
0 dimes
0 nickels
0 pennies
``````

Why is pennies 0? I've tried printing pennies separately, same thing happens. I know for certain as well that `change / 0.01` is equal to `1.0`. For some reason, it seems that `int(1.0)` is equal to `0`. Obviously, it's not. Maybe `1.0` is a floating point number that isn't actually 1 and gets floored to `0`?

Sidenote: Removing int function on pennies and replacing with `%.0f pennies` works.

I guess this is exactly what people talk about when they say not to use floating point numbers when working with money. :)

0

`%.0f`выполняет округление по номерам, а `%i`не делать это. Кроме того , изучить математику!

2

Я знаю наверняка, так что изменение / 0,01 равно 1,0

Ну, не совсем. Если вы пытаетесь делать `change / 0.01`непосредственно из интерпретатора Python, она возвращает что - то вроде `0.99999999999787`из - за плавающие ошибки точек. Естественно, если вы пытаетесь преобразовать , что к междунар, он будет округлить до нуля.

Чтобы избежать этого, вы можете попробовать один из двух вещей. Вы можете попробовать либо используя десятичную модуль из Python, который делает избежать плавающей точкой ошибки , подобные этим, или вы могли бы умножить `change`на 100 в самом начале , так что вы имеете дело с целыми числами, а не числа с плавающей точкой, а также изменить остальную часть вашего код соответственно.

0

Мой код завершения:

``````cost = input("What is the cost in dollars? ")
money = input("Money given: ")
change = int(round(money - cost) * 100)

if change < 0:
print("You didn't pay enough!")
exit()

dollars = change / 100
change %= 100

quarters = change / 25
change %= 25

dimes = change / 10
change %= 10

nickels = change / 5
change %= 5

pennies = change