Question: Does anyone have an idea why this is happening?

```
>>> 289.6*(100-50)
14480.000000000002

```

it should give just **14480** !!

I tried something else and it confused me more

```
>>> 289.6*10*5
14480.0

```

so why the first one gives **14480.000000000002** and the second gives **14480.0** while it is the same!

Answer: 
python converts up to float because of your 289.6. if you want an int, try
`int(289.6*(100-50))`
and that will cast the answer to int.  

The reason your result has the crazy .0000000002 at the end is because of how floats are stored in computers. For a more in depth read on that, [read this](https://www.geeksforgeeks.org/floating-point-error-in-python/)
This is because of floating point precision. In fact, `0.3 - 0.2 != 0.1`, because computers use binary instead of decimal. [Here's a link](https://www.geeksforgeeks.org/why-0-3-0-2-is-not-equal-to-0-1-in-python/) explaining why.

If you really need precision, you can use the `decimal` library:

```
>>> from decimal import Decimal
>>> Decimal("289.6")*(100-50)
Decimal('14480.0')

```