Fehler bei Umwandlung: 17stelliger INT in FLOAT

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
Kegelkugel
User
Beiträge: 32
Registriert: Samstag 8. Januar 2011, 13:37
Wohnort: München
Kontaktdaten:

Hallo,

Code: Alles auswählen

n=12345678901234567
print n
print int(float(n))

n=12345678901234566	# am Ende: 66 statt 67
print n
print int(float(n))

n=1234567890123457	# am Ende: 57 statt 567
print n
print int(float(n))
Dieser Code macht eigentlich nichts besonderes. Trotzdem wird bei mir folgende Ausgabe erzeugt:
12345678901234567
12345678901234568
12345678901234566
12345678901234566
1234567890123457
1234567890123457
Wieso wird bei der Umwandlung von einem 17stelligen Integer in eine float-Zahl (und anschließender Ausgebung wieder als Integer) die letzte Stelle um eins erhöht? Und zwar nur, wenn die letzte Stelle ungerade ist.
Kann mir das jemand erklären?
Danke!

Grüße,
Markus
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das ist IMHO die Ungenauigkeit bei der Darstellung von float-Zahlen. Dabei kommt nämlich auch der Fehler. Sieht du, wenn du dir "float(n)" ausgeben lässt. Die Rückwandlung nach int stimmt.

Wenn du sehr präzise Rechnen musst, dann bietet sich das Decimal-Modul an.

Gruß, noisefloor
Kegelkugel
User
Beiträge: 32
Registriert: Samstag 8. Januar 2011, 13:37
Wohnort: München
Kontaktdaten:

Danke! :)
Antworten