web-dev-qa-db-fra.com

Arrondir les décimales avec la nouvelle fonction de format Python

Comment arrondir une décimale à un nombre particulier de décimales en utilisant la fonction Python 3.0 format?

50
Casebash

Voici un exemple typique et utile ...:

>>> n = 4
>>> p = math.pi
>>> '{0:.{1}f}'.format(p, n)
'3.1416'

le {1} imbriqué prend le deuxième argument, la valeur actuelle de n, et l'applique comme spécifié (ici, à la partie "précision" du format - nombre de chiffres après la virgule décimale), et l'extérieur {0:.4f} résultant s'applique alors. Bien sûr, vous pouvez coder en dur le 4 (Ou n'importe quel nombre de chiffres) si vous le souhaitez, mais le point clé est que vous n'avez pas ayez à!

Encore mieux...:

>>> '{number:.{digits}f}'.format(number=p, digits=n)
'3.1416'

... au lieu des "numéros d'argument" obscurs tels que 0 et 1 ci-dessus, vous pouvez choisir d'utiliser des noms d'argument clair , et passez le valeurs correspondantes comme mot-clé (alias " nommés ") arguments à format - cela peut être donc beaucoup plus lisible, comme vous le voyez !!!

86
Alex Martelli

Dans Python 3.x une chaîne de format contient des champs de remplacement indiqués par des accolades ainsi ::

".... {0: format_spec} ....".format(value)

La spécification de format a la disposition générale:

[[fill]align][sign][pad][width][,][.precision][type]

Ainsi, par exemple en omettant tout le reste sauf la largeur, la précision et le code de type, un nombre décimal ou à virgule flottante pourrait être formaté comme suit:

>>>print("The value of pi is {0:10.7f} to 7 decimal places.".format(math.pi))

Cela s'imprimerait comme:

The value of pi is  3.1415927 to 7 decimal places.
16
Don O'Donnell

Pour arrondir x à n décimales, utilisez:

"{0:.{1}f}".format(x,n)

où 0 et 1 représentent respectivement les premier et deuxième arguments de la méthode str.format ().

4
Casebash

Une réponse mise à jour basée sur la solution de [Alex Martelli] mais en utilisant Python 3.6.2 et sa syntaxe de format mise à jour, je suggère:

>>> n=4
>>> p=math.pi
>>> f'{p:.{n}f}'
'3.1416'

Mais en choisissant judicieusement vos variables, votre code devient auto-documenté

>>> precision = 4
>>> pi = math.pi
>>> f'{pi:.{precision}f}'
'3.1416'
3
Wynn

Je viens de découvrir qu'il est possible de combiner les deux {0} et le {digits} notation. Ceci est particulièrement utile lorsque vous souhaitez arrondir toutes les variables à un nombre de décimales prédéfini avec 1 déclaration:

sName = 'Nander'
fFirstFloat = 1.12345
fSecondFloat = 2.34567
fThirdFloat = 34.5678
dNumDecimals = 2

print( '{0} found the following floats: {1:.{digits}f}, {2:.{digits}f}, {3:.{digits}f}'.format(sName, fFirstFloat, fSecondFloat, fThirdFloat, digits=dNumDecimals))
# Nander found the following floats: 1.12, 2.35, 34.57
1
Nander Speerstra