2010-10-03 7 views
5

Я странный вопрос в Python: разделение не выполняется правильно:Почему это разделение выполняется неправильно?

print pointB[1] 
print pointA[1] 
print pointB[0] 
print pointA[0] 
print (pointB[1]-pointA[1])/(pointB[0]-pointA[0]) 

Таковы результаты:

100 
50 
100 
40 
0 

благодаря

+5

его целочисленное деление на ру 2.x, т.е. '5/6 = 0', попробуйте ввести денома или числитель, чтобы сначала поплавать – Anycorn

+0

См. http://stackoverflow.com/questions/117250/how-do-i-get-a-decimal-value-when-using-using- the-division-operator-in-python, http://stackoverflow.com/questions/1787249/why-doesnt-this-division-work-in-python, http://stackoverflow.com/questions/2958684/python- раздел –

ответ

17

выше поведение верно для Python 2 Поведение / было исправлено на Python 3. В Python 2 вы можете использовать:

from __future__ import division 

, а затем используйте /, чтобы получить желаемый результат.

>>> 5/2 
2 
>>> from __future__ import division 
>>> 5/2 
2.5 

Поскольку вы делите два целых числа, вы получаете результат как целое число.

Или измените одно из чисел на float.

>>> 5.0/2 
2.5 
+7

Я не уверен, что он быть «фиксированным» - целочисленное деление работает так, как должно быть. Плюс Python 3 уже почти 2 года ... –

+0

Я приведу PEP238, 'Это делает выражения ожидающими плавающих или сложных результатов, подверженных ошибкам, когда целые числа не ожидаются, но возможны как входные данные. Также я сомневаюсь, что он будет использовать Python 3.0, так как я предполагаю, что все ясно, что на данный момент придерживается 2.6. Но я тоже учусь, поэтому я, возможно, ошибаюсь. – user225312

+2

Многие языки используют целочисленное деление на Python 2 (что неудивительно, если им не хватает динамического набора текста). Я предполагаю, что это считалось ошибкой дизайна, хотя или не было изменено :) Кстати, последние версии - 2.7 и 3.1 (с 3.2 уже в альфе). –

3

Вот как работает целочисленное деление на python. Либо используйте float, либо конвертируйте в float в свои расчеты:

float(pointB[1]-pointA[1])/(pointB[0]-pointA[0]) 
+0

Кастинг для float на самом деле не работает правильно во всех случаях. –

9

Все сделано правильно.

50/60 = 0

Может быть, вы ищете 50,0/60,0 = 0.83333333333333337, вы можете бросить переменные плавать, чтобы получить, что:

print float(pointB[1]-pointA[1])/(pointB[0]-pointA[0]) 
Смежные вопросы