Thursday, 7 December 2017

math - Python division

itemprop="text">


I was trying to normalize a
set of numbers from -100 to 0 to a range of 10-100 and was having problems only to
notice that even with no variables at all, this does not evaluate the way I would expect
it to:



>>> (20-10) /
(100-10)
0


Float
division doesn't work
either:



>>> float((20-10)
/
(100-10))

0.0


If
either side of the division is cast to a float it will
work:



>>> (20-10) /
float((100-10))
0.1111111111111111


Each
side in the first example is evaluating as an int which means the final answer will be
cast to an int. Since 0.111 is less than .5, it rounds to 0. It is not transparent in my
opinion, but I guess that's the way it
is.




What is the
explanation?


itemprop="text">
class="normal">Answer



You're
using Python 2.x, where integer divisions will truncate instead of becoming a floating
point number.



>>> 1 /
2
0


You
should make one of them a
float:




>>>
float(10 - 20) / (100 -
10)
-0.1111111111111111


or
from __future__ import division, which the forces
/ to adopt Python 3.x's behavior that always returns a
float.



>>> from
__future__ import division
>>> (10 - 20) / (100 -
10)
-0.1111111111111111



No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print ...