Manchmal falsches Ergebnis bei Konvertierung Float -> Int

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
Horrifior
User
Beiträge: 2
Registriert: Samstag 26. Juli 2008, 18:33

Hi allerseits,

folgender Pythoncode fuehrt bei mir zu unerwarteten Ergebnissen:

Code: Alles auswählen

string='0.580'
print float(string)
print 100.000*float(string)
print int(100.000*float(string))
Ausgabe:

0.58
58.0
57

Vielleicht kann mir einer von euch erklaeren, was da fuer 0.58 und auch 0.29 falsch laeuft? Fuer viele andere Zahlen klappt die Konversion im letzten Schritt problemlos ...

Das Problem tritt sowohl auf einem UNIX-Cluster auf als auch auf einem Windows-Rechner auf, beide Male python 2.5. Ist das ein bekanntes Problem/Bug, oder mache ich irgendwas komplett falsch?

Vielen Dank fuer Eure Hilfe!
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Genauigkeitsprobleme beim rechnen mit Fließkommazahlen sind wohl ein bekanntes Problem bei Python. Benutz die Bibliothek decimal um die Ergebnisse genau zu halten.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

BlackVivi: Das hat rein gar nichts mit Python zu tun, sondern ist ein allgemeines Problem bei der Darstellung von Zahlen als Fliesskommazahlen:http://de.wikipedia.org/wiki/Gleitkommazahl

Das Problem ist, dass sich 0.58 nicht exakt als Fliesskomazahl darstellen laesst:

Code: Alles auswählen

>>> print repr(0.58)
0.57999999999999996
Da int(...) die Nachkommastellen einfach abrundet, kommt halt 57 raus. Mit round waere das nicht passiert...
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
Horrifior
User
Beiträge: 2
Registriert: Samstag 26. Juli 2008, 18:33

Okay, danke euch beiden!
Antworten