Why does this simple calculation return 0
>>> 25/100*50
0
while this actually calculates correctly?
>>> .25*50
12.5
>>> 10/2*2
10
What is wrong with the first example?
Why does this simple calculation return 0
>>> 25/100*50
0
while this actually calculates correctly?
>>> .25*50
12.5
>>> 10/2*2
10
What is wrong with the first example?
This is a problem of integer truncation (i.e., any fractional parts of a number are discarded). So:
25 / 100
gives0
However, as long as at least one of the operands in the division is a float, you'll get a float result:
25 / 100.0
or25.0 / 100
or25.0 / 100.0
all give0.25
25/100
is an integer calculation which rounds (by truncation) to0
.In Python 2,
25/100
is zero when performing an integer divison. since the result is less than1
.You can "fix" this by adding
from __future__ import division
to your script. This will always perform a float division when using the/
operator and use//
for integer division.Another option would be making at least one of the operands a float, e.g.
25.0/100
.In Python 3,
25/100
is always0.25
.