2010-12-15 67 views
3

Existe-t-il une option dans format specification pour afficher des valeurs nulles comme espace, sinon utiliser le format?Format de spécification pour afficher vide (chaîne vide) pour zéro (0)

>>> from decimal import Decimal 
>>> '{:+010,.2f}'.format(Decimal('1234.56')) 
'+01,234.56' 
>>> '{:???f}'.format(Decimal(0)) 
'' 
>>> 

MISE À JOUR:

J'ai besoin le même comportement que ici:

http://msdn.microsoft.com/en-us/library/0c899ak8.aspx#SectionSeparator

Si Python ne l'a pas dans les bibliothèques standards, s'il vous plaît confirmer et je vais l'accepter comme la réponse.

+0

Voici une question similaire pour .NET http://stackoverflow.com/questions/2282573/using-net-string-formatting-how-do--format-a-string-to-display-blank-empty -st – warvariuc

+0

Je suis désolé, mais vous ne pouvez évidemment pas avoir un format qui imprime à la fois avec un zéro, deux décimales et un minimum de 10, et vide en même temps. L'impression d'un zéro avec le format ci-dessus donne correctement "+00,000.00". Vous devrez donc le rendre conditionnel à être zéro ou non, quoi que vous fassiez. Et dans ce cas, vous pouvez simplement l'ignorer. Donc, toutes les réponses ci-dessous sont correctes. –

+0

Peut-être que je n'étais pas clair - j'ai besoin d'une option de formatage. Dans le lien de question .NET c'est possible. – warvariuc

Répondre

0

Python n'a pas un séparateur de section fonctionnalité de sorte que vous pouvez avoir différents formats pour les nombres positifs, négatifs ou zéro dans la même chaîne. Vous devrez utiliser des chaînes de format distinctes.

0

format fait beaucoup de choses, mais ce n'est pas ce pour quoi il est conçu. Il y a aussi une solution très simple:

if a == 0: 
    print("") 
else: 
    print(format(a, '+010,.2f')) 
+1

Pardon, désolé, c'est juste désagréable - vous n'avez pas besoin du '== 0', du' print ("") '(?!?!), Ou du' else'. – katrielalex

+0

Je ne peux pas considérer cela comme une réponse. J'ai besoin d'une option de spécification de format, si elle existe – warvariuc

+2

Mais elle n'existe pas, donc les gens publient des solutions de contournement. – kindall

5

Utilisez une expression conditionnelle:

print(format(a, '+010,.2f') if a else "") 
0

Comment définir sur une fonction:

def format_cond(val,fmt,cond=bool,otherwise=''): 
    return format(val, fmt) if cond(val) else otherwise