【问题标题】:Format spec to display blank (empty string) for zero (0)格式规范以显示零 (0) 的空白(空字符串)
【发布时间】:2010-12-15 15:24:51
【问题描述】:

format specification 中是否有一个选项可以将零值显示为空白,否则使用格式?

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

更新:

我需要和这里一样的行为:

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

如果 Python 在标准库中没有它,请确认,我会接受它作为答案。

【问题讨论】:

  • 这里是.NET stackoverflow.com/questions/2282573/…的类似问题
  • 很抱歉,您显然不能有一种格式既可以打印前导零、两位小数和最小 10 宽,又可以同时为空。使用上述格式正确打印零会给出“+00,000.00”。因此,无论您做什么,都必须以是否为零为条件。在这种情况下,您可以跳过它。所以下面所有的答案都是正确的。
  • 也许我不清楚 - 我需要一个格式化程序选项。在 .NET 问题链接中是可能的。

标签: python python-3.x string-formatting


【解决方案1】:

不,您目前无法通过 Python 格式规范执行此操作。请改用条件表达式。例如:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 呃,抱歉,这令人不快——您不需要 ==0print("") (?!?!) 或 else
      • 我不能将此视为答案。我需要一个格式规范选项(如果存在)
      【解决方案4】:
      if a:
          print(...)
      

      【讨论】:

        【解决方案5】:

        如何定义一个函数:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-21
          • 2022-12-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多