Dígitos fijos después del decimal con cadenas f

Resuelto GafferMan2112 asked hace 7 años • 9 respuestas

¿Existe una manera fácil con las cadenas f de Python de fijar el número de dígitos después del punto decimal? (Específicamente cadenas f, no otras opciones de formato de cadenas como .format o %)

Por ejemplo, digamos que quiero mostrar 2 dígitos después del decimal.

¿Cómo puedo hacer eso? digamos que

a = 10.1234
GafferMan2112 avatar Jul 26 '17 00:07 GafferMan2112
Aceptado

Incluya el especificador de tipo en su expresión de formato:

>>> a = 10.1234
>>> f'{a:.2f}'
'10.12'
Robᵩ avatar Jul 25 '2017 17:07 Robᵩ

Cuando se trata de floatnúmeros, puedes usar especificadores de formato :

f'{value:{width}.{precision}}'

dónde:

  • valuees cualquier expresión que se evalúa como un número
  • widthespecifica el número de caracteres utilizados en total para mostrar, pero si valuenecesita más espacio que el ancho especificado, se utiliza el espacio adicional.
  • precisionindica el número de caracteres utilizados después del punto decimal

Lo que falta es el especificador de tipo para su valor decimal. En este enlace encontrará los tipos de presentación disponibles para punto flotante y decimal.

Aquí tienes algunos ejemplos, utilizando el ftipo de presentación (Punto fijo):

# notice that it adds spaces to reach the number of characters specified by width
In [1]: f'{1 + 3 * 1.5:10.3f}'
Out[1]: '     5.500'

# notice that it uses more characters than the ones specified in width
In [2]: f'{3000 + 3 ** (1 / 2):2.1f}' 
Out[2]: '3001.7'

In [3]: f'{1.2345 + 4 ** (1 / 2):9.6f}'
Out[3]: ' 3.234500'

# omitting width but providing precision will use the required characters to display the number with the the specified decimal places
In [4]: f'{1.2345 + 3 * 2:.3f}' 
Out[4]: '7.234'

# not specifying the format will display the number with as many digits as Python calculates
In [5]: f'{1.2345 + 3 * 0.5}'
Out[5]: '2.7344999999999997'
lmiguelvargasf avatar May 14 '2018 23:05 lmiguelvargasf

Agregando a la respuesta de Robᵩ: en caso de que desee imprimir números bastante grandes, usar separadores de miles puede ser de gran ayuda (tenga en cuenta la coma).

>>> f'{a*1000:,.2f}'
'10,123.40'

Y en caso de que quieras rellenar/usar un ancho fijo, el ancho va antes de la coma:

>>> f'{a*1000:20,.2f}'
'           10,123.40'
Bouncner avatar Sep 27 '2018 10:09 Bouncner

Además de la respuesta de Rob , puede usar especificadores de formato con cadenas f ( más aquí ).

  • Puedes controlar el número de decimales :
pi = 3.141592653589793238462643383279

print(f'The first 6 decimals of pi are {pi:.6f}.')
The first 6 decimals of pi are 3.141593.
  • Puedes convertir a porcentaje :
grade = 29/45

print(f'My grade rounded to 3 decimals is {grade:.3%}.')
My grade rounded to 3 decimals is 64.444%.
  • Puedes hacer otras cosas como imprimir una longitud constante :
from random import randint
for i in range(5):
    print(f'My money is {randint(0, 150):>3}$')
My money is 126$
My money is   7$
My money is 136$
My money is  15$
My money is  88$
  • O incluso imprimir con una coma como separador de mil :
print(f'I am worth {10000000000:,}$')
I am worth 10,000,000,000$
Nicolas Gervais avatar Jan 04 '2020 14:01 Nicolas Gervais