Visualizza un float con due cifre decimali in Python


136

Ho una funzione che accetta argomenti float (generalmente numeri interi o decimali con una cifra significativa) e ho bisogno di produrre i valori in una stringa con due cifre decimali (5 -> 5.00, 5.5 -> 5.50, ecc.). Come posso farlo in Python?

Risposte:


148

È possibile utilizzare l'operatore di formattazione della stringa per questo:

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

Il risultato dell'operatore è una stringa, quindi puoi memorizzarla in una variabile, stampare ecc.


273

Poiché questo post potrebbe essere qui per un po ', segnaliamo anche la sintassi di Python 3:

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

9
Solo per completezza, se i decimali sono variabili, ad esempio d=3, la sintassi è"{:.{}f}".format(5, d)
jurajb,

74

formattazione f-string :

Questo era nuovo in Python 3.6: la stringa è racchiusa tra virgolette come al solito, preceduta f'...nello stesso modo in cui si farebbe r'...per una stringa non elaborata. Quindi inserisci tutto ciò che vuoi inserire nella stringa, nelle variabili, nei numeri, all'interno delle parentesi graffe f'some string text with a {variable} or {number} within that text'e Python valuta come con i precedenti metodi di formattazione della stringa, tranne per il fatto che questo metodo è molto più leggibile.

>>> 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!

Come puoi vedere in questo esempio, formattiamo con le cifre decimali in modo simile ai precedenti metodi di formattazione delle stringhe.

NB apuò essere un numero, una variabile o anche un'espressione ad es f'{3*my_func(3.14):02f}'.

Andando avanti, con il nuovo codice preferisco le f-string rispetto ai comuni metodi% s o str.format () poiché le f-string possono essere molto più leggibili e spesso sono molto più veloci .


6

Formattazione delle stringhe:

print "%.2f" % 5

1
Ma tutto ciò sono stringhe, quindi iam non è in grado di fare alcuna operazione matematica su di esse
itsaruns

@itsaruns L'aggiunta di posizioni decimali vuote non fa differenza se devi solo eseguire operazioni matematiche su di esse. Forse stai cercando math.floor, math.ceiloppureround
Steen Schütt,

5

Utilizzo della formattazione di stringhe di pitone.

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

4

Formattazione delle stringhe:

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

O

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

La funzione rotonda può essere utilizzata:

print(round(a, 2))

La cosa buona di round () è che possiamo archiviare questo risultato in un'altra variabile e quindi usarlo per altri scopi.

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

5
Downvote per round. Non deve essere utilizzato solo a scopo di visualizzazione .
mercoledì

@wim Rispetto il tuo commento, ma queste risposte sono solo per soddisfare le esigenze di qualcuno.
debaonline4u,

2
@ debaonline4u wim ha ragione. round(5.0001, 2)-> 5.0, no'5.00'
wjandrea,


3

Se vuoi davvero cambiare il numero stesso invece di visualizzarlo in modo diverso usa format ()

Formattalo con 2 decimali:

format(value, '.2f')

esempio:

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

0

So che è una vecchia domanda, ma stavo faticando a trovare la risposta da solo. Ecco cosa mi è venuto in mente:

Python 3:

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

3
Ciao, benvenuto in Stack Overflow. Quando rispondi a una domanda che ha già molte risposte, assicurati di aggiungere alcune informazioni aggiuntive sul perché la risposta che stai fornendo è sostanziale e non semplicemente facendo eco a ciò che è già stato verificato dal poster originale. Ciò è particolarmente importante nelle risposte "solo codice" come quella che hai fornito.
CHB


-1

Se desideri ottenere un valore in virgola mobile con due cifre decimali limitate al momento dell'input della chiamata,

Dai un'occhiata ~

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

Perché evaluna stringa quando potresti semplicemente round? Ad ogni modo, questo non funziona nemmeno correttamente, poiché se si alimenta 5, si ottiene 5.0invece 5.00come vuole OP.
wjandrea,

Anche questo non funziona per nane inf.
wjandrea,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.