为什么//返回一个浮点数?

时间:2014-02-02 09:44:02

标签: python math python-3.x integer floating

为什么这个函数在" //"适用于整数?

>>> minimum = int((a + b) - math.fabs(a-b))//2      
>>> print(type(minimum))

1 个答案:

答案 0 :(得分:6)

//并不意味着将返回整数,运算符//被调用(floor division),但可能返回float或int它取决于操作数类型,例如:9//2等于49.0//2.0等于4.0。那是浮动的。

  

5.6. Binary arithmetic operations¶

     

/(除法)和//(地板除法)运算符产生其参数的商。数字参数首先转换为通用类型。普通或长整数除法产生相同类型的整数; “结果是数学划分的结果,'floor'功能应用于结果”。除以零会引发ZeroDivisionError异常。

检查ideone's link of working example是否有Python3._:
以下示例可能有助于了解///之间的区别以及为什么//有用(阅读评论):

a = 9.0
b = 2.0

print a//b   # floor division gives `4.0` instead of `4.5` 

a = 9
b = 2

print a/b   # int division because both `b` and `a` are `int` => `4.5`  
print a//b  # float division returns `4`

a = 9.0
b = 2

print a/b   # float division gives `4.5` because `a` is a float  
print a//b  # floor division fives `4.0`

输出:

4.0   # you doubt 
4.5   
4 
4.5   # usefulness of //
4.0

现在在你的表达式中,两个操作数都是int,所以answer是int type:

  int((a + b) - math.fabs(a-b))  //  2 
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^     ^^      
#   int due to casting              int   => `minimum` as int    

因此,如果任何操作数是浮点数,那么//会导致浮点数,但幅度等于floor。