我试图将一组从-100到0的数字归一化到10-100的范围,并且遇到了问题,但我注意到即使根本没有变量,这也不会以我期望的方式进行评估:
>>> (20-10) / (100-10)
0
浮点数除法也不起作用:
>>> float((20-10) / (100-10))
0.0
如果除法的任一侧被强制转换为浮点数,它将工作:
>>> (20-10) / float((100-10))
0.1111111111111111
第一个示例中的每一方都计算为int,这意味着最终的答案将被强制转换为int。由于0.111小于.5,因此舍入为0。在我看来,这不是透明的,但我想这就是它的方式。
解释是什么?
发布于 2010-06-02 22:36:54
您使用的是Python 2.x,其中整数除法将被截断,而不是变成浮点数。
>>> 1 / 2
0
您应该将其中一个设置为float
>>> float(10 - 20) / (100 - 10)
-0.1111111111111111
或者from __future__ import division
,它强制/
采用Python3.x总是返回浮点数的行为。
>>> from __future__ import division
>>> (10 - 20) / (100 - 10)
-0.1111111111111111
发布于 2010-06-02 22:35:58
你是putting Integers in so Python is giving you an integer back
>>> 10 / 90
0
如果之后将其强制转换为浮点数,则四舍五入已经完成,换句话说,0整数将始终变为0浮点数。
如果你在除法的两端使用浮点数,那么Python会给出你所期望的答案。
>>> 10 / 90.0
0.1111111111111111
所以在你的例子中:
>>> float(20-10) / (100-10)
0.1111111111111111
>>> (20-10) / float(100-10)
0.1111111111111111
发布于 2010-06-02 22:35:14
在进行除法运算之前,需要将其更改为浮点数。这就是:
float(20 - 10) / (100 - 10)
https://stackoverflow.com/questions/2958684
复制相似问题