Comment arrondir une décimale à un nombre particulier de décimales en utilisant la fonction Python 3.0 format
?
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 !!!
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.
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 ().
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'
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