python中整除后结果也是小数
有人这么回答,这显然不对
先看个例子:
‘//’明明是整除,为什么结果不是整数,而会出现小数?
首先,关于除法有三种概念:传统除法、精确除法和地板除
#1、传统除法:整数相除结果是整数,浮点数相除结果是浮点数
>>>4/2
2
>>>4.0/2
2.0
>>>4/2.0
2.0
#2、精确除法:无论操作数是整数还是浮点数,得到的商总是真实结果,总是得到浮点数
>>>4/2
2.0
>>>4.0/2
2.0
>>>4/2.0
2.0
#3、地板除:无论操作数是整数还是浮点数,得到的商不保留浮点数的尾数
>>>4//2
2
>>>4.0//2
2.0
但是!这三种除法概念在Python2.6和Python3.0中又有不同
Python2.6中,‘/’按照以上三种除法概念把结果分得更细:比如,整数相除结果为整数,只要有一个浮点数结果就是浮点数(Python2.6:>>>3/2输出1);地板除‘//’(和Python3.0一样):操作数为整数,整除结果为整数。否则操作数只要有一个浮点数,结果就为小数(这里小数和浮点数有区别,就是这个区别能解释开头引入例题)
Python3.0中,‘/’保留小数,这把‘/’的结果合并起来了,无论操作数是整数还是浮点数,结果总都是浮点数(Python3.0:>>>3/2输出1.5);地板除‘//’(和Python2.6一样):同上
因此,现在,就能解释开头引入的例题了
第一个运算得到的结果是保留尾数数值的浮点数(当然也属于小数);而第二个运算,不保留尾数数值,直接截断仅保留其整数数值,但是因为有一个操作数是浮点数,所以得到的结果是小数,这个就是Python3.0对于‘//’的运算规则