Mostrar un flotante con dos decimales en Python

136

Tengo una función que toma argumentos flotantes (generalmente enteros o decimales con un dígito significativo), y necesito generar los valores en una cadena con dos decimales (5 -> 5.00, 5.5 -> 5.50, etc.). ¿Cómo puedo hacer esto en Python?

MarathonStudios
fuente

Respuestas:

148

Puede usar el operador de formato de cadena para eso:

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

El resultado del operador es una cadena, por lo que puede almacenarla en una variable, imprimir, etc.

NPE
fuente
273

Dado que esta publicación podría estar aquí por un tiempo, también señalemos la sintaxis de Python 3:

"{:.2f}".format(5)
Daren Thomas
fuente
9
Solo para completar, si los decimales son variables, por ejemplo d=3, entonces la sintaxis es"{:.{}f}".format(5, d)
jurajb
74

formato de cadena f :

Esto era nuevo en Python 3.6: la cadena se coloca entre comillas como de costumbre, antepuesta f'...de la misma manera que lo haría r'...para una cadena sin formato. Luego coloca lo que quieras poner dentro de tu cadena, variables, números, dentro de llaves f'some string text with a {variable} or {number} within that text', y Python evalúa como con los métodos de formateo de cadenas anteriores, excepto que este método es mucho más legible.

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

Puede ver en este ejemplo que formateamos con decimales de manera similar a los métodos de formateo de cadenas anteriores.

NB apuede ser un número, una variable o incluso una expresión, por ejemplo f'{3*my_func(3.14):02f}'.

En el futuro, con el nuevo código, prefiero las cadenas f sobre los métodos comunes% s o str.format (), ya que las cadenas f pueden ser mucho más legibles y, a menudo, mucho más rápidas .

toonarmycaptain
fuente
6

Formato de cadena:

print "%.2f" % 5
bradley.ayers
fuente
1
Pero todo esto son cadenas, por lo que no iam capaz de hacer cualquier operación matemática sobre ellos
itsaruns
@itsaruns Agregar lugares decimales vacíos no hace ninguna diferencia si solo necesita realizar operaciones matemáticas en ellos. Quizás estés buscando math.floor, math.ceiloround
Steen Schütt
5

Usando el formato de cadena de python.

>>> "%0.2f" % 3
'3.00'
kevpie
fuente
4

Formato de cadena:

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

O

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

La función redonda se puede usar:

print(round(a, 2))

Lo bueno de round () es que podemos almacenar este resultado en otra variable y luego usarlo para otros fines.

b = round(a, 2)
print(b)
debaonline4u
fuente
55
Voto negativo para round. No debe usarse solo con fines de visualización .
wim
@wim Respeto tu comentario, pero estas respuestas son solo para satisfacer los requisitos de alguien.
debaonline4u
2
@ debaonline4u wim tiene razón. round(5.0001, 2)-> 5.0, no'5.00'
wjandrea
3

La sintaxis más corta de Python 3:

n = 5
print(f'{n:.2f}')
Dos
fuente
Ya cubierto por esta respuesta de 2 años antes
wjandrea
3

Si realmente desea cambiar el número en sí mismo en lugar de mostrarlo de manera diferente, use format ()

Formatee a 2 decimales:

format(value, '.2f')

ejemplo:

>>> format(5.00000, '.2f')
'5.00'
Josh
fuente
0

Sé que es una vieja pregunta, pero estaba luchando por encontrar la respuesta yo mismo. Esto es lo que se me ocurrió:

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
fuente
3
Hola, bienvenido a Stack Overflow. Al responder una pregunta que ya tiene muchas respuestas, asegúrese de agregar una idea adicional de por qué la respuesta que está brindando es sustantiva y no simplemente haciendo eco de lo que ya ha sido examinado por el póster original. Esto es especialmente importante en las respuestas de "solo código", como la que ha proporcionado.
chb
-1

Usando la sintaxis de Python 3:

print('%.2f' % number)
S. Roelofs
fuente
1
El formato% no es nuevo en Python 3, y ya está cubierto por esta respuesta de 6 años antes
wjandrea
-1

Si desea obtener un valor de coma flotante con dos decimales limitados al momento de llamar a la entrada,

Mira esto ~

a = eval(format(float(input()), '.2f'))   # if u feed 3.1415 for 'a'.
print(a)                                  # output 3.14 will be printed.
karthik Elango
fuente
¿Por qué evaluna cuerda cuando podrías simplemente round? De todos modos, esto ni siquiera funciona correctamente, ya que si te alimentas 5, obtienes en 5.0lugar de lo 5.00que OP quiere.
wjandrea
Esto tampoco funciona para nany inf.
wjandrea