我最近注意到,int()轮朝着0的方向旋转,而integer division轮朝着地板的方向旋转.

例如:

-7 // 2 == -4
int(-7/2) == -3

我已经阅读了文件,其中规定:

类int(x,基数=10)

返回由数字或字符串x构造的整数对象,如果没有参数,则返回0>鉴于如果x是一个数字,返回x.__int__().对于浮点数,this truncates towards zero.

以及:

楼层划分

Mathematical division that rounds down to nearest integer. The 楼层划分 operator is //. For example, the expression 11 // 4 evaluates to 2 in contrast to the 2.75 returned by float true division. Note that (-11) // 4 is -3 because that is -2.75 rounded downward. See PEP 238.

但对我来说,两个类似的操作(浮点除法到整数)应该返回不同的结果似乎不合逻辑.

功能之间的差异有什么动机吗?

推荐答案

一致性

你需要遵循一些基本的、看似不相关的解释来理解它.

在学校里你学会了带余数的除法.你们已经做过这样的计算:

8 ÷ 4 = 2 R 0
7 ÷ 4 = 1 R 3
6 ÷ 4 = 1 R 2
5 ÷ 4 = 1 R 1
4 ÷ 4 = 1 R 0
3 ÷ 4 = 0 R 3
2 ÷ 4 = 0 R 2
1 ÷ 4 = 0 R 1
0 ÷ 4 = 0 R 0
        ^------ This is the result of x // 4
            ^-- This is the result of x % 4 (modulo)

稍后,您将学习实数的除法:

8 ÷ 4 = 2.0
7 ÷ 4 = 1.75
6 ÷ 4 = 1.5
5 ÷ 4 = 1.25
4 ÷ 4 = 1.0
3 ÷ 4 = 0.75
2 ÷ 4 = 0.5
1 ÷ 4 = 0.25
0 ÷ 4 = 0.0
        ^--- Note that the number in front of the . is int(x/4)

在这之前,你可能认为x // 4int(x/4)总是给出相同的结果.这就是你目前对形势的理解.

但是,看看整数除法会发生什么:R循环后面的数字从3,2,1到0,然后重新启动:3,2,1,0.R前面的数字每四步递减一次.

那么,这将如何进行?

 8 ÷ 4 =  2 R 0
 7 ÷ 4 =  1 R 3
 6 ÷ 4 =  1 R 2
 5 ÷ 4 =  1 R 1
 4 ÷ 4 =  1 R 0
 3 ÷ 4 =  0 R 3
 2 ÷ 4 =  0 R 2
 1 ÷ 4 =  0 R 1
 0 ÷ 4 =  0 R 0
-1 ÷ 4 = -1 R 3
         ^------ We have to decrease now, because we already have 0 four times
              ^-- We have to restart the cycle at 3

同时,实数部分为我们提供:

-1 ÷ 4 = -0.25
          ^----- There is still a 0 in front of the .

这就是为什么-1 // 4给出-1,而int(-1/4)给出0.

功能之间的差异有什么动机吗?

它们有不同的用途://是带余数的整数计算的一部分,int()给出实数运算中.前面的部分.

决定要计算什么,然后决定在Python中使用哪个操作符来获得正确的结果.

问得好.继续学习.

Python-3.x相关问答推荐

如何获得给定列表中所有可能的元素组合?

Django将任何查询显示为html表格

使用Python抓取sofascore以获取有关球队阵容和投票的信息

基于组/ID从原始数据框中创建两个子数据框

删除列表中的第二个出现

需要找到完全匹配并使用正则表达式替换

使用 Python 截断并重新编号对应于特定 ID/组的列

Python3:是否可以将变量用作函数调用的一部分

仅当从 USB 摄像头接收到新图像时才处理图像

通过附加/包含多个列表来创建 nDimensional 列表

Dask 多阶段资源设置导致 Failed to Serialize 错误

为什么 setattr 在绑定方法上失败

如何禁用 pylint 禁止自用警告?

tensorflow 中 numpy.newaxis 的替代方案是什么?

导入 python 模块而不实际执行它

Windows 下 Python 3.x 的 OpenCV

如何为 Python 3.x 安装 psycopg2?

如何在 QGraphicsView 中启用平移和zoom

Selenium Python - 处理没有这样的元素异常

什么是ANSI_X3.4-1968编码?