So formatieren Sie eine schwebende Zahl in Python auf eine feste Breite


321

Wie formatiere ich eine schwebende Zahl mit den folgenden Anforderungen auf eine feste Breite:

  1. Führende Null, wenn n <1 ist
  2. Fügen Sie nachfolgende Dezimalnullen hinzu, um die feste Breite auszufüllen
  3. Schneiden Sie Dezimalstellen über die feste Breite hinaus ab
  4. Richten Sie alle Dezimalstellen aus

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äre wie

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000

Antworten:


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

druckt

   23.2300
    0.1233
    1.0000
    4.2230
 9887.2000

Der Formatbezeichner in geschweiften Klammern folgt der Python-Format-String-Syntax . Insbesondere besteht es in diesem Fall aus den folgenden Teilen:

  • Die leere Zeichenfolge vor dem Doppelpunkt bedeutet "nimm das nächste bereitgestellte Argument format()" - in diesem Fall das xals einziges Argument.
  • Der 10.4fTeil nach dem Doppelpunkt ist die Formatspezifikation .
  • Das fbezeichnet die Festkommanotation.
  • Das 10ist die gesamte Breite des Feldes gedruckt werden, lefted gepolsterten durch Leerzeichen.
  • Dies 4ist die Anzahl der Stellen nach dem Dezimalpunkt.

12
Ich verstehe also, dass 4f die Begrenzung der Dezimalstellen auf 4 (mit nachgestellten Nullen) darstellt, aber was bedeutet die 10? Bedeutet das, dass diese Formatierung nicht mit ganzen Zahlen größer als 9999999999 (zehn Neuner) funktioniert? Nur neugierig.
— hobbes3

55
10.4bedeutet eine Breite von 10 Zeichen und eine Genauigkeit von 4 Dezimalstellen.
— MRAB

13
@ hobbes3: 10ist die minimale Feldbreite , dh die minimale Länge der gedruckten Zeichenfolge. Zahlen sind standardmäßig rechtsbündig und mit Leerzeichen aufgefüllt. Weitere Informationen finden Sie in der Dokumentation .
— Sven Marnach

9
Für Pythons vor 2.7:("%0.4f" % x).rjust(10)
— Steven Rumbalski

22
@StevenRumbalski: Oder einfach "%10.4f" % x. In Python 2.6 können Sie auch verwenden "{0:10.4f}".format(x).
— Sven Marnach

87

Es ist einige Jahre her, seit dies beantwortet wurde, aber ab Python 3.6 ( PEP498 ) können Sie Folgendes verwenden 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

2
Beachten Sie, dass die Breite auch Punktzeichen enthält. Wenn Sie also 9 als Breite angeben, wird 1 zum Drucken des Punkts verwendet, die anderen 8 zum Drucken von Ziffern und Leerzeichen.
— off99555

37

In Python3 funktioniert Folgendes:

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

Dies hat sich in den letzten 4 Jahren geändert. Jetzt %ist die Formatierung die älteste Formatierungsmethode. Aus mehreren Gründen wird str.formatoder f-stringsbevorzugt %. Früher, als es nur war str.format, hatten die Leute einige Gründe, aber f-stringsdieses Loch behoben. Format Mini-Sprache Dokumente , str.format Beispiele aus Dokumenten und F-String Literale Beispiele in Dokumenten
— ninMonkey

10

Siehe String 3. Syntax im Python 3.x- Format :

IDLE 3.5.1   
numbers = ['23.23', '.1233', '1', '4.223', '9887.2']

for x in numbers:  
    print('{0: >#016.4f}'. format(float(x)))  

     23.2300
      0.1233
      1.0000
      4.2230
   9887.2000

6

Sie können das Pad auch mit Nullen belassen. Wenn Sie beispielsweise numbereine Länge von 9 Zeichen haben möchten , verwenden Sie Folgendes:

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

Wenn also number = 4.656, ist die Ausgabe:00004.656

In Ihrem Beispiel sieht die Ausgabe folgendermaßen 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, bei dem dies nützlich sein kann, ist, wenn Sie Dateinamen in alphabetischer Reihenfolge ordnungsgemäß auflisten möchten. Ich habe in einigen Linux-Systemen festgestellt, dass die Nummer: 1,10,11, .. 2,20,21, ...

Wenn Sie also die erforderliche numerische Reihenfolge in Dateinamen erzwingen möchten, müssen Sie das Feld mit der entsprechenden Anzahl von Nullen belassen.


2

In Python 3.

GPA = 2.5
print(" %6.1f " % GPA)

6.1fbedeutet, dass nach den Punkten 1 Ziffern angezeigt werden, wenn Sie 2 Ziffern nach den Punkten drucken, sollten Sie nur %6.2fso, dass %6.3f3 Ziffern nach dem Punkt gedruckt werden.

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.