[我最近注意到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。
但是对我来说,两个类似的操作(将浮点数除以整数)应该返回不同的结果,这似乎是不合逻辑的。
这些功能之间的差异是否有动机?
谢谢。
一致性。
您需要遵循一些非常基本且看似无关的解释才能理解它。
[在学校,您已经学会了除法运算。您已经完成了如下计算:
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 // 4
和int(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中使用哪个运算符以获得正确的结果。
好问题。继续学习。