Python Zahlen mit genau 4 Nachkommastellen speichern?

1 Antwort

Von Experte MrAmazing2 bestätigt

Wenn du wirklich fixe Nachkommastellen willst, verwendest du ein Decimal statt float.

https://docs.python.org/3/library/decimal.html

DNSxxx 
Fragesteller
 09.01.2021, 17:22

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)

from decimal import *

zahl = np.random.normal(40.05 , 0.0015, size=100 )

def zahl_f(zahl):
    getcontext().prec = 4
    lst = []
    for i in zahl:
        lst.append(Decimal(i))
    return lst

zahl_f(zahl)
0
alfredo153  09.01.2021, 17:39
@DNSxxx

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:

https://docs.python.org/3/library/functions.html#round

0
DNSxxx 
Fragesteller
 09.01.2021, 19:05
@alfredo153

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

0
alfredo153  09.01.2021, 19:25
@DNSxxx

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'
2