2010-10-03 20 views
5

Ich habe ein seltsames Problem in Python: die Teilung nicht korrekt durchgeführt:Warum wird diese Division nicht korrekt ausgeführt?

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

Dies sind die Ergebnisse:

100 
50 
100 
40 
0 

dank

+5

seine Integer-Division in py 2.x dh '5/6 = 0', versuche, den Nenner oder Nenner zuerst zu floaten – Anycorn

+0

Siehe http://stackoverflow.com/questions/117250/how-do-i-get-a-decimal-value-when-using-using- der-division-operator-in-python, http://stackoverflow.com/questions/1787249/why-doesnt-this-division-work-in-python, http://stackoverflow.com/questions/2958684/python- Abteilung –

Antwort

17

Das obige Verhalten für Python wahr ist 2 Das Verhalten von / wurde in Python 3 behoben. In Python 2 können Sie Folgendes verwenden:

from __future__ import division 

und dann / verwenden, um das gewünschte Ergebnis zu erhalten.

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

Da Sie zwei Ganzzahlen teilen, erhalten Sie das Ergebnis als Ganzzahl.

Oder ändern Sie eine der Nummern in eine float.

>>> 5.0/2 
2.5 
+7

Ich bin mir nicht sicher, dass es muss sei "fixed" - die Ganzzahl-Division funktioniert so, wie sie soll. Plus Python 3 ist seit fast 2 Jahren out ... –

+0

Ich zitiere PEP238, 'Dies macht Ausdrücke Float erwarten oder komplexe Ergebnisse fehleranfällig, wenn ganze Zahlen nicht erwartet werden, aber als Eingaben möglich sind. Auch bezweifle ich, dass er verwenden würde Python 3.0 seit ich denke, jeder macht es klar, 2.6 für jetzt zu bleiben. Aber ich lerne auch, also irre ich mich vielleicht. – user225312

+2

Viele Sprachen verwenden die Integer-Division auf Python-2-Basis (was nicht überraschend ist, wenn ihnen dynamische Typisierung fehlt). Ich nehme an, dass es als Designfehler betrachtet wurde, oder es wäre nicht geändert worden :) Übrigens sind die neuesten Versionen 2.7 und 3.1 (mit 3.2 bereits in Alpha). –

3

So funktioniert Integer Division in Python. Verwenden Sie entweder Floats oder konvertieren Sie in Float in der Berechnung:

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

Casting to float funktioniert in allen Fällen nicht richtig. –

9

Es ist richtig gemacht.

50/60 = 0

suchen Sie vielleicht für 50,0/60,0 = ,83333333333333337, können Sie Ihre Variablen, die kennen zu schweben werfen können:

print float(pointB[1]-pointA[1])/(pointB[0]-pointA[0]) 
Verwandte Themen