2010-12-15 4 views
3

Gibt es eine Option in format specification, um Nullwerte als leer anzuzeigen, andernfalls Format verwenden?Formatspezifikation zur Anzeige leer (leere Zeichenkette) für Null (0)

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

UPDATE:

Ich brauche das gleiche Verhalten wie hier:

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

Wenn Python es nicht in Standardbibliotheken haben, bitte bestätigen Sie diese, und ich werde akzeptieren es als die Antwort.

+0

hier ist eine ähnliche Frage für .NET http://stackoverflow.com/questions/2282573/using-net-string-formatting-how-doi-format-a-string-to-display-blank-empty -st – warvariuc

+0

Es tut mir leid, aber Sie können natürlich nicht ein Format haben, das sowohl mit einer führenden Null, zwei Dezimalstellen und mindestens 10 Breite drucken, und gleichzeitig leer ist. Wenn Sie eine Null mit dem obigen Format drucken, erhalten Sie "+00,000.00". Sie müssen also dafür sorgen, dass es null ist oder nicht, was auch immer Sie tun. Und dann kannst du es einfach überspringen. Also sind alle Antworten richtig. –

+0

Vielleicht war ich nicht klar - ich brauche eine Formatierer Option. Im .NET-Frage-Link ist es möglich. – warvariuc

Antwort

0

Python keinen Abschnitt Separator Funktionalität, so dass Sie verschiedene Formate für positive, negative oder Null-Zahlen in der gleichen Zeichenfolge haben können. Sie müssen separate Formatzeichenfolgen verwenden.

0

format macht viele Dinge, aber dafür ist es nicht gedacht. Es gibt auch eine sehr einfache Lösung:

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

Ugh, tut mir leid, das ist einfach unangenehm - du brauchst nicht das '== 0', das' print ("") '(?!?!), Oder das' else'. – katrielalex

+0

Ich kann das nicht als eine Antwort betrachten. Ich brauche eine Formatspezifikationsoption, wenn sie existiert – warvariuc

+2

Aber es existiert nicht, also veröffentlichen Leute Workarounds. – kindall

5

Verwenden Sie einen bedingten Ausdruck:

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

Wie über eine Funktion definieren:

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