Python Zahlen mit genau 4 Nachkommastellen speichern?
Hallo,
ich möchte eine Liste mit Zufallszahlen erstellen die immer genau 4 Nachkommastellen haben. Also wenn die Beispielsweise 40.05 ist dann soll 40.0500 ausgegeben werden. In meinem bisherigen Code werden die Zahlen auf 4 Nachkommastellen gekürzt aber eben leider nicht aufgefüllt. Kann mir da jemand behilflich sein?
Mein bisheriger Code:
zahl = np.random.normal(40.05 , 0.0015, size=100 )
def zahl_f(zahl):
lst = []
for i in zahl:
lst.append(float("%0.4f" %(i)))
return lst
1 Antwort
Wenn du wirklich fixe Nachkommastellen willst, verwendest du ein Decimal statt float.
Weil Decimal(i) keine Rundung macht, wenn ein float übergeben wird - erklärt auch die Doku. Du musst vom Kontext create_decimal_from_float() verwenden:
https://docs.python.org/3/library/decimal.html#decimal.Context.create_decimal_from_float
Ehrlich gesagt ist mir aber weiterhin unklar, ob du all das wirklich brauchst. Wenn es dir nur um die Darstellung bei der Ausgabe geht, kannst du das doch mit Stringformatierung genau steuern. Du kannst auch floats runden, aber dann bleiben das trotzdem floats:
Da hast du recht das ich das eigentlich alles nicht brauche, weil ich die ausgegebenen Zahlen aus der Zufallsnummern-Liste nicht mehr verändere. Das sollte nur ein kleines Programm werden für meinen Qualitäter in der Arbeit der öfter mal erfundene Werte braucht. Aber er will sie mit 4 Nachkommastellen. Freilich könnte man die Zahlen dann noch in eine Excel kopieren und dann ihm erst geben, aber ich wollte ihm die Zahlen gleich in der richtigen Formatierung geben.
Hätte das gerade mit round probiert, aber da werden mir die fehlenden Nullen leider auch nicht geschrieben:
a = 40.10000000
b = round(a, 4)
print(b)
Ausgabe:
40.1
ich bräuchte in diesem Beispiel aber:
40.1000
Und da bin ich leider zu dumm um es hinzubekommen
Wie gesagt, geht doch nur um die Formatierung bei der Ausgabe.
>>> pi = 3.14159265359
>>> f'{pi:.4f}'
'3.1416'
Oder mit str.format():
>>> '{:.4f}'.format(pi)
'3.1416'
Mit dem Decimal hätte ich auch schon experementiert, bin aber wahrscheinlich wegen meinem leider zu schlechten Englisch nicht auf die Lösung gekommen.
Hätte es so probiert, aber das funktioniert leider auch nicht:
(Dachte das prec = 4 steht für die Kommastellen)