[英]What is the difference between 3/2 and -3/2?
我是编程和Python的初学者。 我正在做一些简单的数学运算。 因此,我们知道,Python解释器中的3/2
给出了1
。 但是-3/2
给-2
。 你能指出这里的区别吗?
在Python 2中, /
执行整数除法。 这意味着结果(如果它不是整数) 向下舍入到下一个整数值。 当值为负时,这自然会转向更大幅度的负数。
直观地说,整数除法的结果只是浮点除法结果的数学平台 。 因此,整数除法通常也称为平面划分 。
floor(1.5) # Returns 1.0
floor(-1.5) # Returns -2.0
可以通过在模块顶部放置from __future__ import division
来改变Python 2中的这种行为。 此导入将使/
运算符仅指示真正的除法(浮点除法),并使用//
运算符启用显式换层(整数除法)。 这些约定是Python 3中的标准。
from __future__ import division
print(3/2) # 1.5
print(3//2) # 1
正如@Dunes在评论中指出的那样,值得注意的是-
具有比/
更高的优先级,因此-3/2
相当于(-3)/2
而不是-(3/2)
。 如果首先应用除法,则结果确实为-1
。
-3/2 == -1.5 , floor(-1.5) = -2
同样
3/2 == 1.5 , floor(1.5) = 1
Python有两个除法运算符。
/
//
这里, //
将始终将结果舍入到最接近的整数(与操作数的类型无关)。 这称为地板划分 。 但是/
将四舍五入到最接近的整数,如果两个操作数都是整数,那么如果其中一个操作数是浮点数,它就会进行实际除法。
通过这个例子可以清楚地理解这种差异,
>>> 11/4
2
>>> 11.0/4
2.75
>>> 11//4
2
>>> 11.0//4.0
2.0
从楼层划分的 Python文档引用,
向下舍入到最接近整数的数学除法。 地面划分运营商是
//
。 例如,表达式11 // 4
计算结果为2
,与float true division返回的2.7
5相比。 注意(-11) // 4
是-3
因为向下舍入-2.75
。 见PEP 238 。
引用文本中的最后一行将是您实际问题的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.