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?

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.


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)

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 .


6

Formato de cadena:

print "%.2f" % 5

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'

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)

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

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'

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

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

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.

¿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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.