提问人:Ray 提问时间:10/9/2008 最后编辑:GeorgyRay 更新时间:2/6/2022 访问量:704232
用于除法时,“/”和“//”有什么区别?
What is the difference between '/' and '//' when used for division?
答:
//
是楼层划分。它将始终为您提供结果的整数下限。另一种是“常规”划分。
双斜杠 , 是楼层划分://
>>> 7//3
2
//
无论您的类型如何,都可以实现“楼层划分”。所以会给 ,但两者都会给 ,并且会给 。1.0/2.0
0.5
1/2
1//2
1.0//2.0
0
有关详细信息,请参见 PEP 238:更改除法运算符。
评论
math.floor()
math.fmod()
/
并且是双元运算符(两个操作数,左和右,分子和分母)//
在 Python 3.x 中,将返回 并将返回 。前者是浮点除法,后者是地板除法,有时也叫整数除法。5 / 2
2.5
5 // 2
2
在 Python 2.2 或更高版本的 2.x 行中,整数没有区别,除非您执行 ,这会导致 Python 2.x 采用 3.x 行为。from __future__ import division
无论将来导入如何,都将返回,因为这是操作的地板划分结果。5.0 // 2
2.0
您可以在 PEP 238:更改除法运算符中找到详细说明。
评论
python -Qnew
-Qold
-Qwarn
-Qwarnall
5.0 / 2
2.5
5 / 2.0
int
正如大家已经回答的那样,是楼层划分。//
为什么这很重要,因为在 2.2 的所有 Python 版本(包括 Python 3.x 版本)中,这都是明确的底线划分。//
的行为可能会根据以下因素而改变:/
- 是否处于活动状态导入(模块本地)
__future__
- Python 命令行选项,或
-Q old
-Q new
Python 2.x 说明:
澄清一下 Python 2.x 行,既不是楼层除法,也不是真正的除法。/
/
当两个参数都为 时,是楼层除法,但当任一参数为 时,是真除法。int
float
>>> print 5.0 / 2
2.5
>>> print 5.0 // 2
2.0
评论
等式的答案四舍五入到下一个较小的整数或浮点数,并以 .0 作为小数点。
>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0
/→ 浮点除法
//→ 地板事业部
让我们看看 Python 2.7 和 Python 3.5 中的一些示例。
Python 2.7.10 与 Python 3.5
print (2/3) ----> 0 Python 2.7
print (2/3) ----> 0.6666666666666666 Python 3.5
Python 2.7.10 与 Python 3.5
print (4/2) ----> 2 Python 2.7
print (4/2) ----> 2.0 Python 3.5
现在,如果您希望(在 Python 2.7 中)具有与 Python 3.5 中相同的输出,您可以执行以下操作:
蟒蛇 2.7.10
from __future__ import division
print (2/3) ----> 0.6666666666666666 # Python 2.7
print (4/2) ----> 2.0 # Python 2.7
而 Python 2.7 和 Python 3.5 中的楼层划分之间没有任何区别。
138.93//3 ---> 46.0 # Python 2.7
138.93//3 ---> 46.0 # Python 3.5
4//3 ---> 1 # Python 2.7
4//3 ---> 1 # Python 3.5
评论
-100 // 33
100 // -33
-100 // -33
Python 2.7 和其他即将推出的 Python 版本:
- 分部 (
/
)
将左手操作数除以右手操作数
例:4 / 2 = 2
- 楼层划分 (
//
)
操作数的除法,其中结果是去掉小数点后数字的商。但是,如果其中一个操作数为负数,则结果为底数,即从零(向负无穷大)四舍五入:
示例:和 、 、9//2 = 4
9.0//2.0 = 4.0
-11//3 = -4
-11.0//3 = -4.0
分区和楼层分区运营商的运作方式相似。/
//
5.0//2
结果为 ,而不是 ,因为运算符返回值的返回类型遵循 Python 强制(类型转换)规则。2.0
2
//
Python 促进了较低数据类型(整数)到较高数据类型(浮点数)的转换,以避免数据丢失。
//
是楼层划分。它将始终为您提供结果的下限值。- 另一个是浮点除法。
/
以下是 和 之间的区别;
我已经在 Python 3.7.2 中运行了这些算术运算。/
//
>>> print (11 / 3)
3.6666666666666665
>>> print (11 // 3)
3
>>> print (11.3 / 3)
3.7666666666666667
>>> print (11.3 // 3)
3.0
评论
前面的答案很好。我想补充一点。在一些值上,它们都会产生相同的商。之后,楼层除法运算符 () 工作正常,但除法 () 运算符工作不正常://
/
>>> int(755349677599789174 / 2) # Wrong answer
377674838799894592
>>> 755349677599789174 // 2 # Correct answer
377674838799894587
Python 3.x 澄清
只是为了补充之前的一些答案。
需要注意的是:
a // b
是楼层划分。如:
数学地板(a/b)
不是 int 除法。如:
整数(a/b)
不是四舍五入到 0 浮点除法。如:
圆形(a/b,0)
因此,当涉及到正数和负数时,行为方式是不同的,如以下示例所示:
1 // 2 为 0,如下所示:
数学地板(1/2)
-1 // 2 是 -1,如下所示:
数学地板(-1/2)
蟒蛇 3
操作 结果 笔记 x / y
x 和 y 的商 x // y
x 和 y 的底商 (1) 笔记:
- 也称为整数除法。结果值是一个整数,但结果的类型不一定是 int。结果总是向负无穷大四舍五入:是、是、是和是。
1//2
0
(-1)//2
-1
1//(-2)
-1
(-1)//(-2)
0
蟒蛇 2
操作 结果 笔记 x / y
x 和 y 的商 (1) x // y
x 和 y 的(底数)商 (4)(5) 笔记:
1. 对于(普通或长)整数除法,结果为整数。结果始终向负无穷大四舍五入:1/2 为 0,(-1)/2 为 -1,1/(-2) 为 -1,(-1)/(-2) 为 0。请注意,如果任一操作数是长整数,则结果为长整数,而不考虑数值。
5.也称为整数除法。结果值是一个整数,但结果的类型不一定是 int。
总结
- x//y : 精确整数除法
- int(x/y) OR math.floor(x/y):整数除法不精确(但几乎正确)
- x/y:浮点除法(失去意义)
卓越的计算结果
import math
N = 1004291331219602346 # huge number
print(N//100) #=> 10042913312196023 is correct answer
print(math.floor(N/100)) #=> 10042913312196024 is wrong answer
print(math.ceil(N/100)) #=> 10042913312196024 is wrong answer
print(int(N/100)) #=> 10042913312196024 is wrong answer
考虑
我想到了对 .
首先,Python计算表达式并得到INACT浮点数z。 其次,Python计算表达式。
当重要性的丧失不容忽视时,我们会得到一个错误的结果。int(x/y)
x/y
int(z)
评论
//