我最近注意到,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相关问答推荐

正确的本地react 方式-Django身份验证

Pandas 根据条件增加Dataframe列

在 sum() 中将字符串转换为 int (或 float)

使用 Fetch 提交表单到 Django 视图

如何将值映射到具有上限和下限的新列

如何通过 python 使用 auth no priv 获取 SNMPv3?

Pandas groupby 然后 for each 组添加新行

按字母顺序排序列表 (OrderFilter),条件是值为 '' 的条目位于列表 DRF 的末尾

在 string.find() 条件下加入两个 Dataframes

如何沿单列获取嵌套列表中的唯一值?

如何转置和 Pandas DataFrame 并命名新列?

提高时间复杂度的一些建议

缺失时推断的数据类可选字段

使用 RANSAC 在激光雷达点云中查找电力线

如何使用 Selenium by class_name 从大学橄榄球数据中抓取图像 url 列表

例外:使用 Pyinstaller 时找不到 PyQt5 插件目录,尽管 PyQt5 甚至没有被使用

Python3 mysqlclient-1.3.6(又名 PyMySQL)的用法?

Python图例属性错误

用 numpy nan 查找列表的最大值

类型提示返回 NameError: name 'datetime' not defined