Dígitos fijos después del decimal con cadenas f
¿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
Incluya el especificador de tipo en su expresión de formato:
>>> a = 10.1234
>>> f'{a:.2f}'
'10.12'
Cuando se trata de float
números, puedes usar especificadores de formato :
f'{value:{width}.{precision}}'
dónde:
value
es cualquier expresión que se evalúa como un númerowidth
especifica el número de caracteres utilizados en total para mostrar, pero sivalue
necesita más espacio que el ancho especificado, se utiliza el espacio adicional.precision
indica 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 f
tipo 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'
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'
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$