整数除法和python中的float到int转换之间的区别是什么原因?

问题描述 投票:5回答:1

[我最近注意到int()将浮点数向0取整,而整数除法将浮点数向其底数取整。

例如:

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

我已经阅读了指定以下内容的文档:

class int(x,base = 10)

返回由数字或字符串x构成的整数对象,如果未提供任何参数,则返回0。如果x是数字,则返回x。int()。对于浮点数,此将截断为零。

和:

楼层划分

向下舍入为最接近的整数的数学除法。地板除法运算符为//。例如,与float true除法返回的2.75相比,表达式11 // 4的计算结果为2。请注意(-11)// 4是-3,因为它是向下向下取整的-2.75。参见PEP 238。

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

这些功能之间的差异是否有动机?

谢谢。

python python-3.x integer-division
1个回答
7
投票

一致性。

您需要遵循一些非常基本且看似无关的解释才能理解它。

[在学校,您已经学会了除法运算。您已经完成了如下计算:

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前面的数字每第4步递减一次。

所以,它将如何进行?

 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中使用哪个运算符以获得正确的结果。

好问题。继续学习。

© www.soinside.com 2019 - 2024. All rights reserved.