2017-02-23 3 views
0

Использование Python 2.7 и -1/2 будет результатом -1, так как -1 - слово -0.5. Но я хочу получить результат 0, который равен 1/2 (результат равен 0), затем отрицательный 1/2 (окончательный результат все еще 0). Интересно, есть ли элегантный способ сделать это?отрицательное числовое деление на Python

Мое настоящее решение использует абс и сначала проверяет их знак, который кажется не очень изящным, задаваясь вопросом, есть ли у кого-нибудь более элегантные решения?

Исходный код в 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

Спасибо, пожалуйста, как ваш метод и проголосуйте. Похоже, в Python нет простого решения? –

+0

Спасибо, пожалуйста, ответьте как ответ. –

1

Сначала проверьте признаки, а затем разделить:

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

Спасибо DYZ, проголосуйте и не могли бы вы объяснить немного больше, какова ваша цель '(a> = 0)^(b <0)'? –

+1

Это выражение 'True', если и только если оба' a' и 'b' имеют один и тот же знак. – DyZ

+0

Спасибо DYZ, '^' is XOR, он должен работать на битах, но '(a> = 0)' или '(b <0)' возвращает True или False, как вы выполняете XOR на True и False? –

-1

Что об этом

int(a/float(b)) 

int функция делает трюк:

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

я вижу, что это также один из wers к этому вопросу In Python, what is a good way to round towards zero in integer division?

+0

Функция 'int' не делает трюк, например. 'int (-1/2)' в Python 2. – TigerhawkT3

+0

@ TigerhawkT3 Вы должны сделать 'int (-1/float (2))', который работает в Python 2.7! – Elmex80s

Смежные вопросы