auffüllen eines floats mit nullen ohne %-operator

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
Benutzeravatar
dall♀
User
Beiträge: 12
Registriert: Dienstag 23. März 2010, 15:44

hi,

ich möchte floats als strings ausgeben und hab dabei eine feste anzahl von nachkommastellen. wenn beim runden allerdings hinten eine 0 rauskommt, wird die abgeschnitten - das will ich verhindern.
der %-operator steht außer frage, weil die genauigkeit in einer variable gespeichert ist.

Code: Alles auswählen

prec = 2
value = 123.499999
print round(value, prec)
würde 123.5 und nicht 123.50 ergeben.

sowas wie

Code: Alles auswählen

print '%. ' + str(prec) + 'f' % value
hab ich sogar auch ausprobiert ^^ da seht ihr mal, wie verzweifelt ich bin ;D

erbitte hilfe! es ist doch sicher ganz primitiv..
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Deine „Verzweiflungstat“ würde sogar funktionieren, wenn du eine Klammer um deine String-Addition machen und das Leerzeichen im ersten Teilstring weglassen würdest.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Code: Alles auswählen

>>> prec = 2
>>> value = 123.4999999999
>>> print "%.*f" %(prec,value)
123.50
lunar

Ab 2.6 funktioniert auch:

Code: Alles auswählen

>>> '{0:.{1}f}'.format(123.4999999, 2)
'123.50'
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ist evtl. moneyfmt() gesucht, siehe: http://docs.python.org/library/decimal.html?#recipes

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Oder str.zfill(width) / str.rjust("0", width).
Benutzeravatar
dall♀
User
Beiträge: 12
Registriert: Dienstag 23. März 2010, 15:44

spitze, vielen dank! :)
numerix hat geschrieben:

Code: Alles auswählen

>>> prec = 2
>>> value = 123.4999999999
>>> print "%.*f" %(prec,value)
123.50
das habe ich letztendlich benutzt, aber eure vorschläge auch ausprobiert.. hat super geklappt :)
Antworten