2010-10-03 11 views
5

Tengo un problema extraño en Python: la división no se realiza correctamente:¿Por qué esta división no se realiza correctamente?

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

Estos son los resultados:

100 
50 
100 
40 
0 

gracias

+5

su división de enteros en 2.x py, es decir '5/6 = 0', intente lanzar el denom o el numerador para flotar primero – Anycorn

+0

Vea http://stackoverflow.com/questions/117250/how-do-i-get-a-valuedecimal-cuando-utilizando- the-division-operator-in-python, http://stackoverflow.com/questions/1787249/why-doesnt-this-division-work-in-python, http://stackoverflow.com/questions/2958684/python- división –

Respuesta

17

El comportamiento anterior es cierto para Python 2 El comportamiento de / se corrigió en Python 3. En Python 2 puede usar:

from __future__ import division 

y luego use / para obtener el resultado que desee.

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

Dado que divide dos enteros, obtiene el resultado como un entero.

O bien, cambie uno de los números a float.

>>> 5.0/2 
2.5 
+7

No estoy seguro de que necesite ser 'fijo' - la división entera funciona como se supone que debe hacer. Además Python 3 ha estado fuera por casi 2 años ... –

+0

Voy a citar PEP238, 'Esto hace que las expresiones esperen flotar o que los resultados complejos sean propensos a errores cuando no se esperan enteros pero son posibles como entradas. También dudo que esté usando Python 3.0 ya que supongo que todo el mundo deja claro que se quede con 2.6 por ahora. Pero también estoy aprendiendo, así que quizás esté equivocado. – user225312

+2

Muchos lenguajes usan la división de enteros de la forma de Python 2 (lo cual no es sorprendente si carecen de tipado dinámico). Supongo que se consideró un defecto de diseño, o no se habría cambiado :) Por cierto, las últimas versiones son 2.7 y 3.1 (con 3.2 ya en alfa). –

3

Así es como la división entera funciona en python. Use flotación o convierta para flotar en su cálculo:

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

Fundir para flotar realmente no funciona correctamente en todos los casos. –

9

Se hace correctamente.

50/60 = 0

Quizás esté interesado en 50,0/60,0 = 0.83333333333333337, puede convertir sus variables para flotar para conseguir que:

print float(pointB[1]-pointA[1])/(pointB[0]-pointA[0]) 
Cuestiones relacionadas