Feste Ziffern nach der Dezimalstelle mit F-Strings

320

Gibt es mit Python-F-Strings eine einfache Möglichkeit, die Anzahl der Stellen nach dem Dezimalpunkt festzulegen? (Speziell F-Strings, keine anderen Formatierungsoptionen für Strings wie .format oder%)

Angenommen, ich möchte 2 Ziffern nach der Dezimalstelle anzeigen.

Wie mache ich das? Sagen wir das mal

a = 10.1234
GafferMan2112
quelle

Antworten:

476

Fügen Sie den Typbezeichner in Ihren Formatausdruck ein:

>>> a = 10.1234
>>> f'{a:.2f}'
'10.12'
Robᵩ
quelle
33
Keines der gefundenen Beispiele für die Formatierung von F-Strings, einschließlich des PEP, zeigt, dass Sie den Typbezeichner verwenden können. Ich denke, ich hätte das annehmen sollen, aber die Dokumente, die es ausrufen, wären nett.
GafferMan2112
Sie haben Recht, die meisten Beispiele haben keinen Formatbezeichner. Im PEP macht das Hex-Beispiel: f'input={value:#06x}'und die Datums- / Uhrzeit-Beispiele: {anniversary:%A, %B %d, %Y}und {date:%A}. Ich denke, die wichtigste Erklärung befindet sich im Abschnitt Code Equivalence .
Robᵩ
9
Oh Mann, das ist wunderschön und einfach. Warum habe ich über 45 Sekunden gebraucht, um diese Antwort zu finden? Up ya Spiel, Google.
Matt Fletcher
2
Beachten Sie auch, dass ohne f, wenn Sie - f '{a: .2}' schreiben, die Gesamtzahl der Ziffern gezählt wird und die Antwort 10
Drako
87

Wenn es um floatZahlen geht, können Sie Formatbezeichner verwenden :

f'{value:{width}.{precision}}'

wo:

  • value ist ein Ausdruck, der zu einer Zahl ausgewertet wird
  • widthGibt die Anzahl der Zeichen an, die insgesamt für die Anzeige verwendet werden. Wenn jedoch valuemehr Platz benötigt als die Breite angibt, wird der zusätzliche Platz verwendet.
  • precision Gibt die Anzahl der nach dem Dezimalpunkt verwendeten Zeichen an

Was Sie vermissen, ist der Typbezeichner für Ihren Dezimalwert. In diesem Link finden Sie die verfügbaren Präsentationstypen für Gleitkomma und Dezimalzahl.

Hier haben Sie einige Beispiele, die den fPräsentationstyp (Festkomma) verwenden:

# notice that it adds spaces to reach the number of characters specified by width
In [1]: f'{1 + 3 * 1.5:10.3f}'
Out[1]: '     5.500'

# notice that it uses more characters than the ones specified in width
In [2]: f'{3000 + 3 ** (1 / 2):2.1f}' 
Out[2]: '3001.7'

In [3]: f'{1.2345 + 4 ** (1 / 2):9.6f}'
Out[3]: ' 3.234500'

# omitting width but providing precision will use the required characters to display the number with the the specified decimal places
In [4]: f'{1.2345 + 3 * 2:.3f}' 
Out[4]: '7.234'

# not specifying the format will display the number with as many digits as Python calculates
In [5]: f'{1.2345 + 3 * 0.5}'
Out[5]: '2.7344999999999997'
lmiguelvargasf
quelle
34

Hinzufügen zu Robᵩs Antwort: Wenn Sie ziemlich große Zahlen drucken möchten, kann die Verwendung von Tausendertrennzeichen eine große Hilfe sein (beachten Sie das Komma).

>>> f'{a*1000:,.2f}'
'10,123.40'
Bouncner
quelle
15

Verwenden Sie Formatbezeichner mit f-Zeichenfolgen ( mehr hier ).

  • Sie können die Anzahl der Dezimalstellen steuern :
pi = 3.141592653589793238462643383279

print(f'The first 6 decimals of pi are {pi:.6f}.')
The first 6 decimals of pi are 3.141593.
  • Sie können in Prozent umrechnen :
grade = 29/45

print(f'My grade rounded to 3 decimals is {grade:.3%}.')
My grade rounded to 3 decimals is 64.444%.
  • Sie können andere Dinge tun, z. B. konstante Drucklänge :
from random import randint
for i in range(5):
    print(f'My money is {randint(0, 150):>3}$')
My money is 126$
My money is   7$
My money is 136$
My money is  15$
My money is  88$
  • Oder drucken Sie sogar mit einem Komma-Tausender-Trennzeichen :
print(f'I am worth {10000000000:,}$')
I am worth 10,000,000,000$
Nicolas Gervais
quelle
1
a = 10.1234

print(f"{a:0.2f}")

in 0.2f:

  • 0 weist Python an, die Gesamtzahl der anzuzeigenden Ziffern unbegrenzt festzulegen
  • .2 sagt, dass wir nur 2 Stellen nach der Dezimalstelle nehmen wollen (das Ergebnis entspricht einer round () -Funktion).
  • f sagt, dass es eine Gleitkommazahl ist. Wenn Sie f vergessen, wird nur 1 Stelle weniger nach der Dezimalstelle gedruckt. In diesem Fall ist es nur eine Ziffer nach der Dezimalstelle.

Ein detailliertes Video über F-String für Zahlen https://youtu.be/RtKUsUTY6to?t=606

Rahul Sharma
quelle
-2

Zum Runden ...

import datetime as dt
now = dt.datetime(2000, 1, 30, 15, 10, 15, 900)
now_mil = round(now.microsecond/1000)
print(f"{now:%Y/%m/%d %H:%M:%S.}{now_mil:03}")

Ausgabe: 30.01.2000 15: 10: 15.001

Kevin
quelle
Dies hat nichts mit der Frage zu tun und dieser Account war seit diesem Beitrag nicht mehr aktiv
Nicolas Gervais