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

Antworten:


476

Fügen Sie den Typbezeichner in Ihren Formatausdruck ein:

>>> a = 10.1234
>>> f'{a:.2f}'
'10.12'

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'

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'

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$

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


-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


Dies hat nichts mit der Frage zu tun und dieser Account war seit diesem Beitrag nicht mehr aktiv
Nicolas Gervais
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.