【问题标题】:Why does python floor division operator behave like this? [duplicate]为什么python地板除法运算符会这样? [复制]
【发布时间】:2017-09-30 05:13:05
【问题描述】:

为什么python地板除法运算符的行为是这样的? 我遇到了这段代码 sn-p,结果非常令人惊讶。

a = 1 // 10 
b = -1 // 10
print a,b
a= 0
b=-1

打印输出得到的结果是a=0b= -1

为什么a=0b= -1

// 做地板除法,所以总是四舍五入?

【问题讨论】:

  • 是的,“地板”的意思是“向下”。
  • 在我的国家,地板是向下的,天花板是向上的;我们发现这比其他安排更方便。 ;)
  • 这完全不符合标准数学:地板运算符向下舍入到下一个整数。所以 floor(3.9) 等于 floor(3.1) 等于 3,而 floor(-3.9) 等于 floor(-3.1) 等于 -4。您会在整个计算机语言和库中找到此定义。
  • 更严肃的一点是,Python 的整数除法是取整除法非常方便。例如,这是一个查找 5 ≤ 给定数字的最大倍数的演示:[(i, i//5*5) for i in range(-10, 11)]。如果// 向零舍入而不是向负无穷大,则对于负数将无法正常工作。我们也可以使用//来进行ceiling分割。所以这个列表 comp 找到 5 ≥ 给定数字的最小倍数:[(i, i//-5*-5) for i in range(-10, 11)]
  • 在相关说明中,这种行为与r = a % br 的符号始终与b 的符号相同的事实一致,因为如果q, r = a // b, a % b 那么我们想要a == q * b + r 是真的。

标签: python


【解决方案1】:

Floor 函数返回不大于 x 的最大整数。例如,如果输入为 2.25,则输出将为 2.00。 所以在 -0.1 的情况下,小于 -0.1 的最大整数将是 -1。

【讨论】:

    【解决方案2】:

    // 在 Python 中是一个“地板除法”运算符。这意味着这种除法的结果是常规除法结果的下限(用 / 运算符执行)。

    给定数字的下限是小于这个数字的最大整数。例如

    7 / 2 = 3.5 所以7 // 2 = floor of 3.5 = 3

    对于负数,它不太直观:-7 / 2 = -3.5so -7 // 2 = floor of -3.5 = -4。同样-1 // 10 = floor of -0.1 = -1

    // 被定义为与math.floor() 做同样的事情:返回小于或等于浮点结果的最大整数值。 零不小于或等于-0.1。

    【讨论】:

      猜你喜欢
      • 2015-01-20
      • 2021-02-20
      • 2015-07-07
      • 2019-04-07
      • 2019-05-20
      • 2015-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多