Seite 1 von 1

round Funktion gibt komische Werte

Verfasst: Freitag 21. November 2008, 11:00
von würmchen
Hallo,
ich versuche gerade die Größe einer Datei in kB in einer Datenbank zu speichern.

Ausgelesen wir die Größe mit os.stat(filename).st_size

da bekomm ich dann sowas wie 8889

ich würde jetzt gerne alles hinter der zweiten nachkommastelle abschneiden, mein round rundet zwar richtig, aber schneidet nicht ab... kann ich das irgendwie einfach lösen?

Code: Alles auswählen

>>> round(8889/1024.0,1)
8.6999999999999993

Verfasst: Freitag 21. November 2008, 11:09
von C4S3
Floating Point numbers sind ja bekanntermaßen ungenau.
Wenn ich z.B. dein ergebnis mit print ausgebe, bekomme ich ein "schöneres" Ergebnis.

Code: Alles auswählen

b = 8889/1024.0
print b
8.6806640625
round(b,2)
8.6799999999999997
c = round(b,2)
c
8.6799999999999997
print c
8.68
Ist eigentlicht keine Lösung, aber vlt. gibt es ja einen Unterschied zwischen der Ausgabe in der Shell und im Programm/der DB?

Verfasst: Freitag 21. November 2008, 11:15
von rayo
Hi

Willst du nur fuer die Ausgabe auf 2 Stelle begrenzen? Dann mach das so:

Code: Alles auswählen

b = 8889/1024.0
print '%.2f' % b
Gruss

Verfasst: Freitag 21. November 2008, 11:24
von würmchen
hm, ich glaube ich vergess es die werte mit nur einer nachkommastelle zu speichern und beschränke mich dann auf die ausgabe mit dem formatierten print...

danke