357 votes

Comment puis-je formater une valeur décimale sur toujours afficher 2 décimales

Je tiens à afficher :

comme

et :

comme

Quelle que soit la durée du séparateur décimal ou s’il existe des places décimales, j’ai besoin d’afficher le nombre à 2 décimales, et je tiens à le faire de manière efficace. Le but est d’afficher les valeurs de l’argent.

par exemple,``

705voto

BioGeek Points 3724

Il y a des nouvelles spécifications de format:

La documentation peut être un peu obtuse parfois, donc je vous recommande la chaîne Python cookbook de mise en forme pour une référence le plus facilement lisible.

156voto

Travis Bradshaw Points 2255

La chaîne mise en forme de section de la documentation de Python contient la réponse que vous recherchez. En bref :

Quelques exemples :

133voto

Michał Marczyk Points 54179

Je suppose que vous êtes probablement à l'aide de l' Decimal des objets de l' decimal module? (Si vous avez besoin d'exactement deux chiffres de précision au-delà de la virgule avec arbitrairement grand nombre, vous avez certainement devraient être, et c'est ce que votre question le titre l'indique...)

Si oui, la section FAQ de la documentation a une paire question/réponse qui peut être utile pour vous:

Q. En un point fixe de l'application avec deux décimales, certaines entrées ont de nombreux endroits et doivent être arrondis. Les autres ne sont pas censés avoir un excès de chiffres et doivent être validés. Quelles méthodes doivent être utilisées?

A. Le quantifier() la méthode des tours à un nombre fixe de décimales. Si la déclaration Inexacte d'un piège tendu, il est également utile pour la validation:

>>> TWOPLACES = Decimal(10) ** -2       # same as Decimal('0.01')
>>> # Round to two places
>>> Decimal('3.214').quantize(TWOPLACES)
Decimal('3.21')
>>> # Validate that a number does not exceed two places
>>> Decimal('3.21').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Decimal('3.21')
>>> Decimal('3.214').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Traceback (most recent call last):
   ...
Inexact: None

La question suivante se lit

Q. une Fois que j'ai deux place intrants, comment dois-je entretenir que invariant dans une application?

Si vous avez besoin de la réponse (ainsi que beaucoup d'autres informations utiles), voir ladite section de la documentation. Aussi, si vous gardez votre Decimals avec deux chiffres de précision au-delà de la virgule (le sens de la plus grande précision est nécessaire de garder tous les chiffres à gauche de la virgule et deux à droite de celui-ci et pas une de plus...), puis de les convertir à cordes avec str fonctionne correctement:

str(Decimal('10'))
# -> '10'
str(Decimal('10.00'))
# -> '10.00'
str(Decimal('10.000'))
# -> '10.000'

38voto

Adam Rosenfield Points 176408

Vous pouvez utiliser la chaîne mise en forme opérateur ainsi :

Je ne sais pas ce que vous entendez par « efficace »--ce n’est certainement pas le goulot d’étranglement de votre application. Si votre programme s’exécute lentement, profil tout d’abord pour trouver les points chauds et puis optimiser ceux.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X