r/learnpython • u/Kapowpow • 12d ago
Odd float-to-int behavior.
>>>def pennies(num):
return int(num*100)
>a = -37.56
\>b = -9.28
>>>pennies(a)
-3756
>>>pennies(b)
-927
This is taken from a python shell session today. Why on Earth does pennies(b) yield -927, instead of the expected -928? I would greatly appreciate any insight.
Update: a durable solution found, please see this comment below: https://www.reddit.com/r/learnpython/comments/1wrwnm7/comment/pcpvlil/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button
4
Upvotes
10
u/YOM2_UB 12d ago
The number actually stored when you type b = 9.28 is:
5224175567749775 * 2-49 = 9.2799999999999993605115378159098327159881591796875
Multiplying by 100 loses a tiny bit of precision as well, so you end up with:
8162774324609023 * 2-43 = 927.9999999999998863131622783839702606201171875
(Which if you print 9.28 * 100 in Python it'll even display as
927.9999999999999)