蟒司 [英] Python division
问题描述
我试图将一组从 -100 到 0 的数字标准化为 10-100 的范围,但遇到问题只是注意到即使根本没有变量,这也不会以我期望的方式进行评估:
<预><代码>>>>(20-10)/(100-10)0浮动除法也不起作用:
<预><代码>>>>浮动((20-10)/(100-10))0.0如果将除法的任一侧强制转换为浮点数,它将起作用:
<预><代码>>>>(20-10)/浮点数((100-10))0.1111111111111111第一个示例中的每一边都作为 int 进行评估,这意味着最终答案将转换为 int.由于 0.111 小于 0.5,所以它四舍五入到 0.在我看来它不透明,但我想它就是这样.
解释是什么?
您使用的是 Python 2.x,其中整数除法将被截断而不是变成浮点数.
<预><代码>>>>1/20您应该将其中一个设为 float
:
或 from __future__ import Division
,强制 /
采用 Python 3.x 的行为,总是返回一个浮点数.
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?
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
这篇关于蟒司的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!