Seltsame Rechnung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
NedNederlander
User
Beiträge: 10
Registriert: Mittwoch 4. März 2009, 13:25

Hallo miteinander.
Ich habe eben nach längerer Suche im Code einen seltsamen Fehler gefunden.

Code: Alles auswählen

Es geht um volgenden Code-Ausschnitt:

summand_2 = (AnzahlNachrichten / GewichtN)

print "AnzahlNachrichten"
print AnzahlNachrichten

print "GewichtN"
print GewichtN

print "summand_2"
print summand_2

die rechnung sollte doch den wert "AnzahlNachrichten teilen durch "GewichtN".

die ausgabe dieses codes lautet beispielhaft:

Code: Alles auswählen

AnzahlNachrichten
55

GewichtN
5401

summand_2
0

Die Variable summand_2 ergibt imemr 0, auch wenn der Wert von "AnzahlNachrichten" wesentlich höher ist.
Ich kann mir leider nicht erklären, wieso die Rechnung "0" ergibt. Ist das irgend eine Art Rundungsfehler?


bin für Hilfe sehr dankbar!
nemomuk
User
Beiträge: 862
Registriert: Dienstag 6. November 2007, 21:49

Code: Alles auswählen

In [13]: 55/5401
Out[13]: 0

In [14]: 55/5401.0
Out[14]: 0.010183299389002037

In [15]: 55/float(5401)
Out[15]: 0.010183299389002037
Benutzeravatar
martin101986
User
Beiträge: 85
Registriert: Montag 3. Dezember 2007, 19:15
Wohnort: Steiermark, Österreich

Hallo,

das ist kein Rundungsfehler. Das ist das normale Verhalten von Python bei der Division von Ganzahlen.

Damit du den richtigen Wert erhälst musst einen Wert in ein float umwandeln oder von __future__ division importieren.

Code: Alles auswählen

result = float(55) / 5401
print result

#oder

from __future__ import division
result = 55 / 5401
print result

Grüße Martin
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Ergänzend zu den Zahlen:
Vor Python 3 liefert der "/"-Operator bei Division von zwei Ganzzahlen nur den ganzzahligen Teil ohne einen evtl. Rest; ist mind. einer der Operanden eine Fließkommazahl, dann wird "richtig" dividiert.

Ab Python 3 ist das anders; da liefert eine Division mittels "/" immer einen Fließkommawert. Will man definitiv nur den ganzzahligen Wert, verwendet man den "//"-Operator. Das kannst du übrigens auch bei Python 2 tun und ist gewiss keine schlechte Angewohnheit.
NedNederlander
User
Beiträge: 10
Registriert: Mittwoch 4. März 2009, 13:25

vielen herzlichen dank!
Antworten