如何使用字符串格式显示BOTH前导零和3的精度?

cat*_*cat 29 python string-formatting

我试图用前导零和尾随零来表示一个数字,以便总宽度为7,包括小数点.例如,我想将"5"表示为"005.000".似乎字符串格式化将让我做一个或另一个但不是两个.这是我在Ipython中得到的输出,说明了我的问题:

In [1]: '%.3f'%5
Out[1]: '5.000'

In [2]: '%03.f'%5
Out[2]: '005'

In [3]: '%03.3f'%5
Out[3]: '5.000'
Run Code Online (Sandbox Code Playgroud)

第1行和第2行完全符合我的预期.第3行只是忽略了我想要前导零的事实.有任何想法吗?谢谢!

nos*_*klo 48

第一个数字是位数,包括小数点.

>>> '%07.3f' % 5
'005.000'
Run Code Online (Sandbox Code Playgroud)

  • 这也算减号!对于Python恕我直言,异常粗制滥造 (8认同)
  • 作为 python 3 f 字符串:`f"{5:07.3f}"` (4认同)

bab*_*itt 7

[编辑:Gah,再次遭到殴打]

'%07.3F'%5
Run Code Online (Sandbox Code Playgroud)

第一个数字是总字段宽度.


Jay*_*zzo 6

这花了我一秒钟的时间来弄清楚如何使用@nosklo的方法,但要使用.format()和嵌套。

由于我无法在其他任何atm上找到示例,因此我在这里分享。

使用示例 "{}".format(a)

Python 2

>>> a = 5
>>> print "{}".format('%07.3F' % a)
005.000
>>> print("{}".format('%07.3F' % a))
005.000
Run Code Online (Sandbox Code Playgroud)

Python 3

从docs创建的更多python3方法,但是两者都能按预期工作。

注意%vs和,:并且在python3中格式的位置不同。

>>> a = 5
>>> print("{:07.3F}".format(a))
005.000
Run Code Online (Sandbox Code Playgroud)
>>> a = 5
>>> print("Your Number is formatted: {:07.3F}".format(a))
Your Number is formatted: 005.000
Run Code Online (Sandbox Code Playgroud)

使用"{}".format(a)嵌套的示例

然后将其扩展以适合我的代码,即嵌套.format()的:

print("{}: TimeElapsed: {} Seconds, Clicks: {} x {} "
      "= {} clicks.".format(_now(),
                            "{:07.3F}".format((end -
                                               start).total_seconds()),
                            clicks, _ + 1, ((_ + 1) * clicks),
                            )
      )
Run Code Online (Sandbox Code Playgroud)

哪种格式可以按照我想要的方式格式化。

结果

print("{}: TimeElapsed: {} Seconds, Clicks: {} x {} "
      "= {} clicks.".format(_now(),
                            "{:07.3F}".format((end -
                                               start).total_seconds()),
                            clicks, _ + 1, ((_ + 1) * clicks),
                            )
      )
Run Code Online (Sandbox Code Playgroud)

重要注意事项:

  • @babbitt:第一个数字是字段的总宽度。

  • @meawoppl:这也算减号!...