【问题标题】:Format a number containing a decimal point with leading zeroes格式化包含带前导零的小数点的数字
【发布时间】:2011-11-16 11:46:54
【问题描述】:

我想用前导零格式化一个带小数点的数字。

这个

>>> '3.3'.zfill(5)
003.3

考虑所有数字甚至小数点。 python中是否有只考虑整个部分的函数?

我只需要格式化不超过五位小数的简单数字。此外,使用%5f 似乎会考虑尾随而不是前导零。

【问题讨论】:

  • 你试过%5.1f了吗?如果是这样,那有什么问题?
  • 它用空格填充字符串,仍然考虑小数点和它之后的所有内容。

标签: python string-formatting decimal-point


【解决方案1】:

这就是你要找的吗?

>>> "%07.1f" % 2.11
'00002.1'

所以根据你的评论,我可以想出这个(虽然不再那么优雅了):

>>> fmt = lambda x : "%04d" % x + str(x%1)[1:]
>>> fmt(3.1)
0003.1
>>> fmt(3.158)
0003.158

【讨论】:

    【解决方案2】:

    我喜欢新的格式。

    loop = 2
    pause = 2
    print 'Begin Loop {0}, {1:06.2f} Seconds Pause'.format(loop, pause)
    >>>Begin Loop 2, 0002.1 Seconds Pause
    

    在 {1:06.2f}:

    • 1 是变量暂停的占位符
    • 0 表示用前导零填充
    • 包括小数点在内共6个字符
    • 2 精度
    • f 将整数转换为浮点数

    【讨论】:

    • 完美运行!只是 Python 3 的小改动。
    【解决方案3】:

    如您的示例一样,从字符串开始,您可以编写一个像这样的小函数来执行您想要的操作:

    def zpad(val, n):
        bits = val.split('.')
        return "%s.%s" % (bits[0].zfill(n), bits[1])
    
    >>> zpad('3.3', 5)
    '00003.3'
    

    【讨论】:

    • 这正是我不想做的,但如果没有内置功能,我想它会工作。谢谢。
    • @3ee3 在'3' 上试试这个。如果您想要一个适用于ints 和floats 的版本,请在return 之前添加一行bits[0] = bits[0].zfill(n),并将return 更改为return bits = '.'.join(bits)。 `
    • -3.3 怎么样?不会产生预期的结果!!添加一个条件if val.count('-')>0: n=n+1 然后它也适用
    【解决方案4】:

    像这样?

    >>> '%#05.1f' % 3.3
    '003.3'
    

    【讨论】:

    • 它仍然考虑小数部分,并在第一个小数位后删除任何内容
    • 所以要考虑小数位数,并将它们添加到小数位数说明符中。
    【解决方案5】:
    print('{0:07.3f}'.format(12.34))
    

    这将有总共 7 个字符,包括 3 个小数点,即。 “012.340”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多