Python分部

2020-12-04 15:15:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一组从-100到0到10-100的数字标准化,但遇到了一些问题,我发现即使没有任何变量,这也不能以我期望的方式进行评估:

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

浮动分割也不起作用:

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

如果分割的任何一边被抛到一个浮球上,它将起作用:

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

第一个例子中的每一边都是一个整数,这意味着最终的答案将被转换成一个整数。因为0.111小于0.5,它将被舍入为0。在我看来这是不透明的,但我想就是这样。

怎么解释?

3条回答
网友
1楼 ·

您使用的是Python2.x,其中整数除法将被截断,而不是变成浮点数。

>>> 1 / 2
0

你应该做一个float

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

或者from __future__ import division,强制/采用Python 3.x的行为,该行为总是返回一个浮点数。

>>> from __future__ import division
>>> (10 - 20) / (100 - 10)
-0.1111111111111111
网友
2楼 ·

你是putting Integers in so Python is giving you an integer back

>>> 10 / 90
0

如果在之后将其转换为浮点数,则舍入操作已经完成,换句话说,0整数将始终变为0浮点数。

如果您在分区的任何一边使用float,那么Python将给出您期望的答案。

>>> 10 / 90.0
0.1111111111111111

所以在你的情况下:

>>> float(20-10) / (100-10)
0.1111111111111111
>>> (20-10) / float(100-10)
0.1111111111111111
网友
3楼 ·

在除法之前你需要把它改成浮点数。即:

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

相关问题