我试图将一组从 -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。在我看来这不是透明的,但我想事情就是这样。
解释是什么?
原文由 Adam Nelson 发布,翻译遵循 CC BY-SA 4.0 许可协议
您使用的是 Python 2.x,整数除法将被截断而不是变成浮点数。
你应该让其中之一成为
float
:或
from __future__ import division
,它强制/
采用始终返回浮点数的 Python 3.x 行为。