2017-02-23 97 views
0

使用Python 2.7和-1/2將導致-1,因爲-1是floor的-0.5。但我想得到0的結果,即1/2(結果爲0),然後是負1/2(最終結果仍爲0)想知道是否有一種優雅的方式來做到這一點?Python中的負數除

我目前的解決方案是使用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 
+1

這個答案是優雅的,因爲你不真的在浮點運算或符號函數http://stackoverflow.com/questions/1986152/why-doesnt-python-have-a-sign-function – Elmex80s

+0

@ Elmex80s,謝謝。對於「這個答案」,你的意思是哪個答案? –

回答

1

執行部門,然後再次做你的方式,如果它出來了陰性。

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

或使用反向分區.. –

+0

感謝kindall,像你的方法和投票了。它看起來像Python中沒有直接的解決方案? –

+0

非常感謝,請將您的答覆標記爲答案。 –

1

首先檢查標誌,然後劃分:

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

謝謝DYZ,投票了,你能解釋一下,你的目的是什麼?(a> = 0)^(b <0)'? –

+1

當且僅當'a'和'b'具有相同的符號時,這個表達式纔是'真'。 – DyZ

+0

謝謝DYZ,'^'是XOR,它應該對位進行操作,但是(a> = 0)或者(b <0)'返回True或False,你如何在True和False上執行XOR? –