Seite 1 von 1

Anzahl der Nachkommastellen bei float() festlegen

Verfasst: Samstag 24. Juni 2006, 12:23
von _johannes
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.

Verfasst: Samstag 24. Juni 2006, 13:01
von 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.

Verfasst: Samstag 24. Juni 2006, 13:09
von DatenMetzgerX
Wieso musst du umbedingt immer 3 Nachkomma Stellen haben. Kannst auch einfach beim printen so vorgehen

Code: Alles auswählen

print "%.3f" %myfload

Verfasst: Sonntag 25. Juni 2006, 13:57
von _johannes
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.