【问题标题】:negative number division in Python [duplicate]Python中的负数除法[重复]
【发布时间】:2017-07-13 08:11:18
【问题描述】:

使用 Python 2.7 和 -1/2 将导致 -1,因为 -1 是 -0.5 的下限。但我想得到 0 的结果,即 1/2(结果为 0),然后是负数 1/2(最终结果仍为 0)想知道是否有一种优雅的方法可以做到这一点?

我目前的解决方案是使用abs并先检查他们的符号,这似乎不是很优雅,想知道是否有人有更优雅的解决方案?

Python 2.7 中的源代码

a = -1
b = 2
print a/b # output -1
# prefer -(1/2) = 0

r = abs(a)/abs(b)
if (a > 0 and b < 0) or (a < 0 and b > 0):
    r = -r
print r

【问题讨论】:

  • 这个答案很优雅,因为您并不真正使用浮点算术或符号函数stackoverflow.com/questions/1986152/…
  • @Elmex80s,谢谢。对于“这个答案”,你指的是哪个答案?

标签: python python-2.7


【解决方案1】:

做除法,如果结果是否定的,再用你的方法做。

r = a / b
r = -(abs(a) / abs(b)) if r < 0 else r

【讨论】:

  • 或者使用反向地板分割..
  • 谢谢大家,喜欢你的方法并投票。在 Python 中似乎没有直接的解决方案?
【解决方案2】:

先检查符号,然后划分:

r = a/b if ((a >= 0) ^ (b < 0)) else -a/b

【讨论】:

  • 谢谢 DYZ,投票,你能多解释一下(a &gt;= 0) ^ (b &lt; 0) 的目的是什么吗?
  • 当且仅当ab 具有相同符号时,此表达式为True
  • 谢谢 DYZ,^ 是异或,应该对位进行运算,但是 (a&gt;=0)(b&lt;0) 返回 True 或 False,如何对 True 和 False 进行 XOR?
  • True 为 1,False 为 0。
  • @DYZ 你可能想修正你的表达,这在 a 0 时不起作用,例如:a = -1 和 b = 2
【解决方案3】:

这个呢

int(a / float(b))

int 函数可以解决问题:

>>> int(-0.999)
0
>>> int(0.999) 
0

我看到这也是这个问题的答案之一In Python, what is a good way to round towards zero in integer division?

【讨论】:

  • int 函数不能解决问题,例如int(-1/2) 在 Python 2 中。
  • @TigerhawkT3 你应该做int(-1/float(2)),这在 Python 2.7 中有效!
猜你喜欢
  • 2019-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2013-10-31
  • 2019-04-14
  • 1970-01-01
  • 2016-01-19
相关资源
最近更新 更多