Zeigen Sie in Python einen Gleitkommawert mit zwei Dezimalstellen an


136

Ich habe eine Funktion, die Float-Argumente verwendet (im Allgemeinen Ganzzahlen oder Dezimalstellen mit einer signifikanten Ziffer), und ich muss die Werte in einer Zeichenfolge mit zwei Dezimalstellen (5 -> 5,00, 5,5 -> 5,50 usw.) ausgeben. Wie kann ich das in Python machen?

Antworten:


148

Sie können den Zeichenfolgenformatierungsoperator dafür verwenden:

>>> '%.2f' % 1.234
'1.23'
>>> '%.2f' % 5.0
'5.00'

Das Ergebnis des Operators ist eine Zeichenfolge, sodass Sie sie in einer Variablen speichern, drucken usw. können.


271

Da dieser Beitrag möglicherweise für eine Weile hier ist, möchten wir auch auf die Python 3-Syntax hinweisen:

"{:.2f}".format(5)

9
Nur der Vollständigkeit d=3"{:.{}f}".format(5, d)
halber

73

Formatierung von F-Strings :

Das war neu in Python 3.6 - die Zeichenfolge in Anführungszeichen wie gewohnt platziert, vorangestellt mit f'...in gleicher Weise würden Sie r'...für einen Raw - String. Dann platzieren Sie alles, was Sie in Ihre Zeichenfolge, Variablen, Zahlen und Klammern einfügen möchten f'some string text with a {variable} or {number} within that text'- und Python wertet wie bei früheren Formatierungsmethoden für Zeichenfolgen aus, außer dass diese Methode viel besser lesbar ist.

>>> a = 3.141592
>>> print(f'My number is {a:.2f} - look at the nice rounding!')

My number is 3.14 - look at the nice rounding!

Sie können in diesem Beispiel sehen, dass wir mit Dezimalstellen formatieren, ähnlich wie bei früheren Formatierungsmethoden für Zeichenfolgen.

NB akann eine Zahl, eine Variable oder sogar ein Ausdruck sein, z f'{3*my_func(3.14):02f}'.

In Zukunft bevorzuge ich mit neuem Code F-Strings gegenüber gängigen% s- oder str.format () -Methoden, da F-Strings weitaus besser lesbar und oft viel schneller sind .


6

String-Formatierung:

print "%.2f" % 5

1
Aber all dies sind Zeichenfolgen, so dass ich keine mathematischen Operationen an ihnen
ausführen

@itsaruns Das Hinzufügen leerer Dezimalstellen macht keinen Unterschied, wenn Sie nur mathematische Operationen an ihnen ausführen müssen. Sie können suchen math.floor, math.ceiloderround
Steen Schütt

5

Verwenden der Python-Zeichenfolgenformatierung.

>>> "%0.2f" % 3
'3.00'

4

String-Formatierung:

a = 6.789809823
print('%.2f' %a)

ODER

print ("{0:.2f}".format(a)) 

Die runde Funktion kann verwendet werden:

print(round(a, 2))

Das Gute an round () ist, dass wir dieses Ergebnis in einer anderen Variablen speichern und dann für andere Zwecke verwenden können.

b = round(a, 2)
print(b)

5
Downvote für round. Es sollte nicht nur zu Anzeigezwecken verwendet werden.
wim

@wim Ich respektiere Ihren Kommentar, aber diese Antworten dienen nur dazu, die Anforderungen von jemandem zu erfüllen.
debaonline4u

1
@ debaonline4u wim ist richtig. round(5.0001, 2)-> 5.0, nicht'5.00'
wjandrea


3

Wenn Sie die Nummer selbst ändern möchten, anstatt sie nur anders anzuzeigen, verwenden Sie format ()

Formatieren Sie es auf 2 Dezimalstellen:

format(value, '.2f')

Beispiel:

>>> format(5.00000, '.2f')
'5.00'

0

Ich weiß, dass es eine alte Frage ist, aber ich hatte Mühe, die Antwort selbst zu finden. Folgendes habe ich mir ausgedacht:

Python 3:

>>> num_dict = {'num': 0.123, 'num2': 0.127}
>>> "{0[num]:.2f}_{0[num2]:.2f}".format(num_dict) 
0.12_0.13

3
Hallo, willkommen bei Stack Overflow. Wenn Sie eine Frage beantworten, die bereits viele Antworten enthält, geben Sie bitte einen zusätzlichen Einblick, warum die von Ihnen bereitgestellte Antwort inhaltlich ist und nicht nur das wiedergibt, was bereits vom Originalplakat überprüft wurde. Dies ist besonders wichtig bei "Nur-Code" -Antworten wie der von Ihnen angegebenen.
chb


-1

Wenn Sie einen Gleitkommawert mit zwei Dezimalstellen erhalten möchten, die zum Zeitpunkt des Aufrufs der Eingabe begrenzt sind,

Schau dir das an ~

a = eval(format(float(input()), '.2f'))   # if u feed 3.1415 for 'a'.
print(a)                                  # output 3.14 will be printed.

Warum evaleine Schnur, wenn Sie nur könnten round? Auf jeden Fall funktioniert dies nicht einmal richtig, denn wenn Sie einspeisen 5, erhalten Sie 5.0statt 5.00wie OP will.
Wjandrea

Dies funktioniert auch nicht für nanund inf.
Wjandrea
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.