2017-02-23 8 views
0

Mit Python 2.7 und -1/2 wird Ergebnis in -1 sein, da -1 Boden von -0.5 ist. Aber ich möchte das Ergebnis von 0 erhalten, was 1/2 (Ergebnis in 0) ist, dann negativ 1/2 (Endergebnis immer noch 0). Wundern Sie sich, wenn es eine elegante Möglichkeit gibt, dies zu tun?negative Zahl Teilung in Python

Meine aktuelle Lösung benutzt ABS und überprüft zuerst ihr Zeichen, das nicht sehr elegant scheint und sich fragt, ob jemand elegantere Lösungen hat?

Quellcode in 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

Diese Antwort ist elegant, weil Sie nicht wirklich auf Fließkomma Arithmetik oder Zeichenfunktionen http://stackoverflow.com/questions/1986152/why-doesnt-python-have-a-sign-funktion – Elmex80s

+0

@ Elmex80s, danke. Für "diese Antwort", welche Antwort meinst du? –

Antwort

1

die Teilung tun, tun Sie es dann wieder den Weg, wenn es negativ herauskommt.

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

Oder verwenden Sie die umgekehrte Stockwerkteilung. –

+0

Dank kindall, wie Ihre Methode und stimmen Sie auf. Es scheint keine einfache Lösung in Python zu sein? –

+0

Danke kindall, markiere deine Antwort als Antwort. –

1

zuerst die Zeichen überprüfen, dann teilen:

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

Danke DYZ, stimme ab und könntest du ein bisschen mehr erklären, was ist dein Zweck von '(a> = 0)^(b <0)'? –

+1

Dieser Ausdruck ist genau dann wahr, wenn sowohl "a" als auch "b" das gleiche Vorzeichen haben. – DyZ

+0

Dank DYZ, '^' ist XOR, sollte es auf Bits arbeiten, aber '(a> = 0)' oder '(b <0)' gibt True oder False zurück, wie machen Sie XOR auf True und False? –