python2.7版本
本文针对浮点除法和整数除法做了以下实验:
print 15/10
1
print 15.0/10
1.5
print -15/10
-2
print 15//10
1
print 15.0//10
1.0
print -15//10
-2
实验发现,“/”和“//”是很难被区分的,因为”15/10“和“15//10”、“-15/10”和“-15//10”有一样的结果。为了彻底区分两者,我们在头部声明"
“from __future__ import division
from __future__ import division
print 15/10
1.5
print 15.0/10
1.5
print -15/10
-1.5
print 15//10
1
print 15.0//10
1.0
print -15//10
-2
声明头部之后,"/"就成为浮点除法,"//“为整型除法(向下取整数,包括负数除法)。
除了以上特性之外,实验还发现"-15/10"和“-15//10”在两种运算的结果均为“-2”
python3.6版本
该python版本中,不需要添加声明"from __future__ import division
",自动将"/"运算归为浮点除法,"//"为整数除法。当然,添加声明之后也是一样的运算结果。
print 15/10
1.5
print 15.0/10
1.5
print -15/10
-1.5
print 15//10
1
print 15.0//10
1.0
print -15//10
-2
这里补充一下,python常用的几种取整方式(以下结果来自2.7版本,3.6版本第2、3部分结果为整数)(引用:https://blog.csdn.net/u010457943/article/details/77369764?locationNum=7&fps=1)
1.向下取整
a = 3.75
int(a)
3
2.四舍五入
a = 3.25; b = 3.75
round(a); round(b)
3.0
4.0
3.向上取整
import math
a = 3.25 ; b = 3.75
math.ceil(a);math.cei(3.75)
4.0
4.0
再补充一点,除法的取整 (引用:https://blog.csdn.net/u010388829/article/details/46550383)
除法的取整分为三类:向上取整、向下取整、向零取整。
1.向上取整:向+∞方向取最接近精确值的整数。在这种取整方式下,5 / 3 = 2, -5 / -3 = 2, -5 / 3 = -1, 5 / -3 = -1
2.向下取整:向-∞方向取最接近精确值的整数。在这种取整方式下,5 / 3 = 1, -5 / -3 = 1, -5 / 3 = -2, 5 / -3 = -2
3.向零取整:向0方向取最接近精确值的整数,换言之就是舍去小数部分,因此又称截断取整。在这种取整方式下,5 / 3 = 1, -5 / -3 = 1, -5 / 3 = -1, 5 / -3 = -1
通过观察可以发现,无论是向上取整还是向下取整,(-a)/b==-(a/b)都不一定成立。这给程序设计者带来了极大的麻烦。而对于向零取整,(-a)/b==-(a/b)是成立的,以此,C/C++(包括Java)采用这种取整方式。
而Python采用的是向下取整的方式,具体原因得结合取模运算分析。