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
hobbes3
quelle

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.
Sven Marnach
quelle
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
Artomason
quelle
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
Scott Roberts
quelle
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
Readyleader
quelle
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.

elcymon
quelle
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.

Usman Zia
quelle