首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python部门

Python部门
EN

Stack Overflow用户
提问于 2010-06-02 22:33:00
回答 11查看 431.2K关注 0票数 137

我试图将一组从-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。在我看来,这不是透明的,但我想这就是它的方式。

解释是什么?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 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
票数 246
EN

Stack Overflow用户

发布于 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
票数 21
EN

Stack Overflow用户

发布于 2010-06-02 22:35:14

在进行除法运算之前,需要将其更改为浮点数。这就是:

float(20 - 10) / (100 - 10)
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2958684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档