round Funktion gibt komische Werte

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.
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

round Funktion gibt komische Werte

Beitragvon würmchen » Freitag 21. November 2008, 11:00

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
Benutzeravatar
C4S3
User
Beiträge: 292
Registriert: Donnerstag 21. September 2006, 10:07
Wohnort: Oberösterreich

Beitragvon C4S3 » Freitag 21. November 2008, 11:09

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?
Gruß!
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Beitragvon rayo » Freitag 21. November 2008, 11:15

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
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

Beitragvon würmchen » Freitag 21. November 2008, 11:24

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

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]