Seite 1 von 1

Typenvergleich per float() oder int()

Verfasst: Dienstag 2. März 2004, 12:44
von MacEvil
Warum ist "5 == float(5)" true ?
Wenn ich float(5) schreibe wird 5.0 ausgegeben => "5 == 5.0" ist ebenfalls true.

Verfasst: Dienstag 2. März 2004, 13:28
von Dookie
Hi MacEvil,

weil 5 gleich 5.0 ist :wink:
Es werden nicht die Typen sondern die Werte verglichen. Du kannst Dir aber eine einfache Funktion schreiben die auch die Typen vergleicht.

Code: Alles auswählen

def is_same(a,b):
    return a == b and type(a) == type(b)
Gruß

Dookie

Verfasst: Dienstag 2. März 2004, 13:28
von MacEvil
Ok, ich habe es bereits selber gefunden.
5 == float(5) ist true
5 is float(5) ist false

Der Vergleich mit "is" fuehrt zum Ziel

Edit : Oh, da hat ja der Dookie gleich geantwortet. Das mit dem type ist auch interessant :wink:

Verfasst: Dienstag 2. März 2004, 13:41
von Dookie
Vorsicht!!!
is vergleicht die Identität der Instanzen. Da Python kleine Werte (in Version 2.3) von -5 bis 100 intern in einer Liste speichert, bringt Dein Vergleich nur in diesem Bereich das erwartete Ergebnis.

Code: Alles auswählen

>>> a = -6
>>> b = -6
>>> print a is b
False

Gruß

Dookie

Verfasst: Mittwoch 3. März 2004, 08:43
von MacEvil
Ja, das ist allerdings so, zum Glueck wusste ich es schon, dass is nur die Identitaet vergleicht, aber fuer Leser, die zbsp. ueber die Suchmaschine hierherkommen ist es ganz wichtig. Ich hatte nicht daran gedacht es zu erwaehnen

Auch n' Gruss