2010-12-15 94 views
3

format specification中是否有一个选项将零值显示为空白,否则使用格式?格式规格显示空白(空字符串)为零(0)

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

UPDATE:

我需要这里相同的行为:

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

如果Python没有它的标准库,请证实,我会接受它作为答案。

+0

这里是一个类似的问题为.NET http://stackoverflow.com/questions/2282573/using-net-string-formatting-how-do-i-format-a-string-to-display-blank-empty -st – warvariuc 2010-12-15 15:43:00

+0

对不起,你可以显然没有一种格式,它将同时用前导零,小数点后两位和最小十位宽度打印。用上面的格式打印一个零点正确给出“+00,000.00”。因此,无论你做什么,你都必须使它成为零的条件。在这种情况下,你可以跳过它。所以下面的所有答案都是正确的。 – 2010-12-15 21:22:17

+0

也许我不清楚 - 我需要一个格式化程序选项。在.NET的问题链接是可能的。 – warvariuc 2010-12-16 08:27:05

回答

0

Python没有一节分隔功能,因此您可以在同一个字符串中使用不同格式的正数,负数或零数字。你将不得不使用单独的格式字符串。

0

format做了很多事情,但这不是它的设计目的。还有一个非常简单的解决方案:

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

呃,对不起,这只是令人不快 - 你不需要'== 0','print(“”)'(?!?!)或者'else'。 – katrielalex 2010-12-15 15:37:28

+0

我不能认为这是一个答案。我需要格式规范选项,如果它存在 – warvariuc 2010-12-15 15:40:56

+2

但它不存在,所以人们发布解决方法。 – kindall 2010-12-15 15:55:10

5

使用条件表达式:

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

如何定义一个函数:

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