Anzahl der Nachkommastellen bei float() festlegen

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
_johannes
User
Beiträge: 20
Registriert: Montag 19. Juni 2006, 17:37

Hallo, bin Python-Newbie.

Bin schon ganz glücklich, da ich's alleine geschafft habe ein funktionierendes Script zu basteln. Python ist toll.
Es funktioniert auch alles so wie ich es will, nur bei folgender Funktion habe ich ein Problem mit der Zahlenausgabe:

Code: Alles auswählen

### addieren der zeitwerte
def zeitwerte(trgzeit, cuezeiten):
	summen = []
	for i in cuewerte[3:7]:
		summen.append(str(float(trgzeit) + float(cuezeiten.pop())))
	summen.sort()
	return summen
Problem: Bei einer meiner Additionen kommt ein zweistelliger Wert nach dem Komma raus.
Ich möchte aber immer dreistellige Werte haben (also bei "glattem" Ergebnis soll ne Null angehängt werden).
Wie kann ich das in die obige Funktion einbauen?

Danke für Eure Hilfe.

Gruß, _johannes.
BlackJack

Die Funktion ist ein wenig "komisch". Wo kommt `cuewerte` her und warum iterierst Du über ein "Slice" davon ohne etwas mit den Werten zu machen?

Und da du eine Liste mit Zeichenketten sortierst werden die Werte lexikographisch sortiert und nicht nach dem Wert der Zahl. Ist das so gewollt?

Code: Alles auswählen

def zeitwerte(trgzeit, cuezeiten):
    trgzeit = float(trgzeit)
    summen = ['%.1f' % (trgzeit + float(cuezeit)) for cuezeit in cuezeiten[-4:]]
    summen.sort()
    return summen
Das hier sollte das gleiche bewirken, ausser das `cuezeiten` nicht verändert wird und die Zahlen mit einer Nachkommastelle als Zeichenketten formatiert werden.
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Wieso musst du umbedingt immer 3 Nachkomma Stellen haben. Kannst auch einfach beim printen so vorgehen

Code: Alles auswählen

print "%.3f" %myfload
Benutzeravatar
_johannes
User
Beiträge: 20
Registriert: Montag 19. Juni 2006, 17:37

Danke, ihr habt mir sehr geholfen.

Das ganze ist ein Teil eines Skripts, das mehrere .txt-Dateien zusammenführen soll. Am Ende kommt eine .txt-Datei raus, die von einer anderen Applikation weiterverarbeitet wird... und die braucht eben genau immer drei Kommastellen.

@Blackjack:
Mit Deiner Lösung funktioniert's perfekt, danke!
Dennoch steig ich nicht so ganz durch, was da genau jetzt passiert - bin halt noch Newbie und dazu noch Autodidakt.
Ich erkläre mal, was ich genau nicht raffe:
Richtig, das mit den 'cuewerten' ist schräg. Eigentlich sind cuewerte[3:7] gleich den cuezeiten. Ich habe das eingefügt, um zu umgehen, über ein veränderbares Objekt zu iterieren. Das war irgendwie 'dirty', war mir klar.
Deine Lösung ist super. Kannst Du mir die 3.Zeile mal in Prosa aufschreiben? Warum [-4:]? Und warum kann ich jetzt kein pop() mehr bzw. komme ich so ohne Listen aus?

Danke Euch beiden nochmal.
Antworten