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 Decimal
s 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'