web-dev-qa-db-fra.com

Chiffres fixes après les décimales avec les chaînes de caractères

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?

168
GafferMan2112

Incluez le spécificateur de type dans votre expression de format:

>>> a = 10.1234
>>> f'{a:.2f}'
'10.12'
257
Robᵩ

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écimal

Ce 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'
45
lmiguelvargasf

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'
19
Bouncner