504 Stimmen

Formatierung einer Fließkommazahl auf feste Breite in Python

Wie formatiere ich eine Gleitkommazahl auf eine feste Breite mit den folgenden Anforderungen?

  1. Führende Null, wenn n < 1
  2. Fügen Sie nach dem Komma eine oder mehrere Nullen hinzu, um die feste Breite aufzufüllen.
  3. Abschneiden von Dezimalziffern über die festgelegte Breite hinaus
  4. Alle Dezimalpunkte ausrichten

Zum Beispiel:

% formatter something like '{:06}'
numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
    print formatter.format(number)

Die Ausgabe würde wie folgt aussehen

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000

709voto

Sven Marnach Punkte 525472
numbers = [23.23, 0.1233, 1.0, 4.223, 9887.2]                                                                                                                                                   

for x in numbers:                                                                                                                                                                               
    print("{:10.4f}".format(x)) 

druckt

   23.2300
    0.1233
    1.0000
    4.2230
 9887.2000

Der Formatbezeichner innerhalb der geschweiften Klammern folgt dem Syntax für Python-Formatzeichenfolgen . In diesem Fall besteht sie aus den folgenden Teilen:

  • En leere Zeichenkette vor dem Doppelpunkt bedeutet "nimm das nächste angegebene Argument zu format() " - in diesem Fall die x als einziges Argument.
  • En 10.4f Teil nach dem Doppelpunkt ist die Formatangabe .
  • En f bezeichnet die Festkomma-Notation.
  • En 10 ist die Gesamtbreite des zu druckenden Feldes, linksbündig mit Leerzeichen aufgefüllt.
  • En 4 ist die Anzahl der Stellen nach dem Dezimalpunkt.

239voto

artomason Punkte 3105

Es ist schon einige Jahre her, dass diese Frage beantwortet wurde, aber ab Python 3.6 ( PEP498 ) könnten Sie die neue f-strings :

numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
    print(f'{number:9.4f}')

Drucke:

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000

50voto

Scott Roberts Punkte 979

In python3 funktioniert das Folgende:

>>> v=10.4
>>> print('% 6.2f' % v)
  10.40
>>> print('% 12.1f' % v)
        10.4
>>> print('%012.1f' % v)
0000000010.4

15voto

Flimm Punkte 112964

Verwendung von f-Zeichenfolge-Literale :

>>> number = 12.34
>>> print(f"{number}")
12.34
>>> print(f"{number:10f}")
 12.340000
>>> print(f"{number:10.4f}")
   12.3400

En 10.4f nach dem Doppelpunkt : es el Formatangabe wobei 10 die Breite der ganzen Zahl in Zeichen (einschließlich Leerzeichen) und die zweite Zahl 4 die Anzahl der Dezimalstellen ist, und die f steht für eine Gleitkommazahl.

Es ist auch möglich, Variablen zu verwenden, anstatt die Breite und die Anzahl der Dezimalstellen hart zu kodieren:

>>> number = 12.34
>>> width = 10
>>> decimals = 4
>>> print(f"{number:{width}.{decimals}f}")
   12.3400

14voto

elcymon Punkte 391

Sie können auch links mit Nullen auffüllen. Zum Beispiel, wenn Sie wollen number eine Länge von 9 Zeichen haben, links mit Nullen aufgefüllt verwenden:

print('{:09.3f}'.format(number))

Wenn also number = 4.656 ist die Ausgabe: 00004.656

In Ihrem Beispiel sieht die Ausgabe wie folgt aus:

numbers  = [23.2300, 0.1233, 1.0000, 4.2230, 9887.2000]
for x in numbers: 
    print('{:010.4f}'.format(x))

Drucke:

00023.2300
00000.1233
00001.0000
00004.2230
09887.2000

Ein Beispiel, wo dies nützlich sein kann, ist, wenn Sie Dateinamen in alphabetischer Reihenfolge auflisten möchten. Mir ist aufgefallen, dass bei einigen Linux-Systemen die Nummerierung 1,10,11,...2,20,21,... lautet.

Wenn Sie also die notwendige numerische Reihenfolge in Dateinamen erzwingen wollen, müssen Sie die entsprechende Anzahl von Nullen links einfügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X