【问题标题】:Why does // return a float?为什么 // 返回一个浮点数?
【发布时间】:2014-02-25 20:41:29
【问题描述】:

如果“//”适用于整数,为什么这个函数会打印一个浮点数?

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

【问题讨论】:

  • 你能显示runnable code that demonstrates the problem when you run it吗?特别是,显示ab 的创建。 minimum 在此代码中应该是 int
  • @user2357112 ab 无关紧要。 m = int(whatever) // 2 显然是 int // int,不管 whatever 是什么。
  • @glglgl:我知道。创建ab 的目的是确保它真正可运行。 (另外,有时int(whatever) 很长,但这并不重要。)(等等,从头开始。Python 3。int(whatever) 始终是一个 int,假设标签是正确的。)
  • 出于好奇:为什么不使用 min 函数?
  • @user2357112 a 和 b 指的是两个不同列表的长度。另外,我应该澄清一下,如果我将“int”留在第 1 行的开头,它会打印和整数,但不是没有它

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


【解决方案1】:

// 并不意味着将返回整数,运算符 // 被调用(地板除法),但可能返回 float 或 int 它取决于操作数类型,例如:9//2 等于 4 和 @987654327 @ 等于 4.0。那是浮动的。

5.6. Binary arithmetic operations¶

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

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

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,所以答案是 int 类型:

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

所以// 可以在任何操作数是浮点数但幅度等于下限时产生浮点数。

【讨论】:

  • 不过,OP 代码中的操作数似乎是 ints。我怀疑 OP 的问题仅仅是一个错字造成的。
  • @user2357112 是的,你是对的。math.fabs(a-b) 可以是浮点数吗?
  • 它总是一个浮点数。不过,它在int 调用中。
  • 在您的第二条print 语句中:Python 3 是这样的9/2==4.5
  • @Manaar // 返回 int 如果两个操作数都是 int 并且幅度始终是 floor,而 / 返回精确除法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 2018-03-02
  • 1970-01-01
  • 2014-09-20
  • 2011-04-16
  • 2022-06-15
  • 2018-11-26
相关资源
最近更新 更多