Existe-t-il un moyen facile avec Python f-strings (PEP 498) de fixer le nombre de chiffres après la virgule décimale? (Plus précisément les chaînes de caractères f, pas les autres options de formatage telles que .format ou%)
Par exemple, supposons que je veuille afficher 2 chiffres après la décimale.
Comment je fais ça?
a = 10.1234
f'{a:.2}'
Out[2]: '1e+01'
f'{a:.4}'
Out[3]: '10.12'
a = 100.1234
f'{a:.4}'
Out[5]: '100.1'
Comme vous pouvez le constater, "précision" a changé de signification, passant de "nombre de places après la virgule décimale" comme c'est le cas lors de l'utilisation de la mise en forme% au total des chiffres. Comment puis-je toujours obtenir 2 chiffres après la décimale, quelle que soit la taille de mon nombre?
Incluez le spécificateur de type dans votre expression de format:
>>> a = 10.1234
>>> f'{a:.2f}'
'10.12'
Quand il s'agit de float
nombres, vous pouvez utiliser spécificateurs de format :
f'{value:{width}.{precision}}'
où:
value
est une expression qui donne un nombre.width
spécifie le nombre total de caractères à afficher, mais si value
nécessite plus d'espace que la largeur spécifiée, l'espace supplémentaire est utilisé.precision
indique le nombre de caractères utilisés après le point décimalCe qui vous manque, c'est le spécificateur de type pour votre valeur décimale. Dans ce lien , vous trouvez les types de présentation disponibles pour les nombres à virgule flottante et décimale.
Vous avez ici quelques exemples, utilisant le type de présentation f
(Point fixe):
# 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'
Ajout à la réponse de Robᵩ: si vous souhaitez imprimer des nombres assez grands, utiliser des séparateurs de milliers peut être d'une grande aide (notez la virgule).
>>> f'{a*1000:,.2f}'
'10,123.40'