Почему это разделение не выполняется правильно? - PullRequest
7 голосов
/ 03 октября 2010

У меня странная проблема в 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

спасибо

Ответы [ 3 ]

18 голосов
/ 03 октября 2010

Вышеуказанное поведение верно для 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
9 голосов
/ 03 октября 2010

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

50/60 = 0

Может быть, вы ищете 50.0 / 60.0 = 0.83333333333333337, вы можете привести ваши переменные к плавающей точке, чтобы получить:

print  float(pointB[1]-pointA[1]) / (pointB[0]-pointA[0])
3 голосов
/ 03 октября 2010

Так работает целочисленное деление в питоне.В вычислениях используйте поплавки или конвертируйте их в числа с плавающей точкой:

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