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?

MarathonStudios
quelle

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.

NPE
quelle
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)
Daren Thomas
quelle
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 .

toonarmycaptain
quelle
6

String-Formatierung:

print "%.2f" % 5
bradley.ayers
quelle
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'
Kevpie
quelle
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)
debaonline4u
quelle
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

Kürzeste Python 3-Syntax:

n = 5
print(f'{n:.2f}')
DOS
quelle
Bereits durch diese Antwort von 2 Jahren zuvor
abgedeckt
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'
Josh
quelle
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
Vasiliy Triandafilidi
quelle
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

Verwenden der Python 3-Syntax:

print('%.2f' % number)
S. Roelofs
quelle
1
% -Formatierung ist in Python 3 nicht neu und wird bereits von dieser Antwort aus 6 Jahren zuvor behandelt
wjandrea
-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.
karthik Elango
quelle
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