dict.__str__ komisches Verhalten

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
Igor der Schreckliche
User
Beiträge: 17
Registriert: Montag 6. Juli 2009, 19:20
Wohnort: Bonn

Hallo zusammen!

Kann mir einer folgendes Phänomen erklären?

Code: Alles auswählen

Python 2.5.2 (r252:60911, Jul 31 2008, 17:28:52)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a={1: 0.1}
>>> print a[1]
0.1
>>> print a
{1: 0.10000000000000001}
Es stellt für mich kein Problem dar, ich würde nur gerne wissen, warum das so ist.

Danke,

Igor :-)
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Klar:

Code: Alles auswählen

>>> print(0.1)
0.1
>>> repr(0.1)
'0.10000000000000001'
>>>
Und falls du die 1 am Ende meinst: http://de.wikipedia.org/wiki/Gleitkomma ... Grundlagen.
Das Leben ist wie ein Tennisball.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

`print` ruft `str` für das auszugebende Objekt auf. Das `dict.__str__` hingegen ruft `repr` für jedes Element auf. `float.__str__` und `float.__repr__` sind anders implementiert. Die erste Funktion rundet, die andere stellt die Zahl so (ungenau) da, wie sie ist.

Stefan
Igor der Schreckliche
User
Beiträge: 17
Registriert: Montag 6. Juli 2009, 19:20
Wohnort: Bonn

EyDu hat geschrieben: Und falls du die 1 am Ende meinst: http://de.wikipedia.org/wiki/Gleitkomma ... Grundlagen.
Danke!
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Oder eine etwas spezifischere Begründung (hab ja nicht ohne Grund diesen Abschnitt übersetzt):
http://tutorial.pocoo.org/floatingpoint.html
Antworten