如何在Python中将浮点数格式化为固定宽度

hob*_*es3 282 python string numbers number-formatting

如何使用以下要求将浮动数字格式化为固定宽度:

  1. 如果n <1,则前导零
  2. 添加尾随小数零以填充固定宽度
  3. 截断超过固定宽度的十进制数字
  4. 对齐所有小数点

例如:

% formatter something like '{:06}'
numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
    print formatter.format(number)
Run Code Online (Sandbox Code Playgroud)

输出就像

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000
Run Code Online (Sandbox Code Playgroud)

Sve*_*ach 457

for x in numbers:
    print "{:10.4f}".format(x)
Run Code Online (Sandbox Code Playgroud)

版画

   23.2300
    0.1233
    1.0000
    4.2230
 9887.2000
Run Code Online (Sandbox Code Playgroud)

大括号内的格式说明符遵循Python格式字符串语法.具体来说,在这种情况下,它由以下部分组成:

  • 空字符串冒号前的意思是"采取下一个提供参数format()" -在这种情况下,x作为唯一的参数.
  • 10.4f冒号之后的部分是格式规范.
  • f表示定点表示法.
  • 10是被打印的领域的总宽度,由空间填充.
  • 4是数字的小数点后的位数.

  • "10.4"表示10个字符的宽度和4个小数位的精度. (51认同)
  • @StevenRumbalski:或者只是"%10.4f"%x`.在Python 2.6中,您还可以使用`"{0:10.4f}".format(x)`. (22认同)
  • @ hobbes3:`10`是最小字段宽度,即打印字符串的最小长度.默认情况下,数字是右对齐的,并用空格填充 - 有关详细信息,请参阅[文档](http://docs.python.org/library/string.html#format-specification-mini-language). (12认同)
  • 所以我理解4f表示将小数限制为4(尾随零),但10是什么意思?这是否意味着此格式不适用于大于9999999999(十个9)的整数?只是好奇. (11认同)
  • 对于2.7之前的Pythons:`("%0.4f"%x).rjust(10)` (9认同)

art*_*son 62

这已经过了几年,但是从Python 3.6(PEP498)开始,您可以使用新的f-strings:

numbers = [23.23, 0.123334987, 1, 4.223, 9887.2]

for number in numbers:
    print(f'{number:9.4f}')
Run Code Online (Sandbox Code Playgroud)

打印:

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000
Run Code Online (Sandbox Code Playgroud)

  • 请注意,宽度还包括点字符。因此,如果您指定9为宽度,则1将用于打印点,其他8将用于打印数字和空格。 (2认同)

Sco*_*rts 34

在python3中,以下工作:

>>> v=10.4
>>> print('% 6.2f' % v)
  10.40
>>> print('% 12.1f' % v)
        10.4
>>> print('%012.1f' % v)
0000000010.4
Run Code Online (Sandbox Code Playgroud)

  • 这适用于Python 2和3. (6认同)
  • 这种情况在过去 4 年里发生了变化,现在“%”格式化是最古老的格式化方法。由于多种原因,使用“str.format”或“f-strings”优于“%”。以前,当它只是“str.format”时,人们有一些原因,但“f-strings”修复了这个漏洞。[格式迷你语言文档](https://docs.python.org/3/library/string.html#format-specification-mini-language),[文档中的 str.format 示例](https://docs. python.org/3/library/string.html#format-examples) 和 [文档中的 f-string 文字示例](https://docs.python.org/3/reference/lexical_analysis.html#formatted-string-literals ) (2认同)

Fli*_*imm 13

使用f 字符串文字

>>> number = 12.34
>>> print(f"{number}")
12.34
>>> print(f"{number:10f}")
 12.340000
>>> print(f"{number:10.4f}")
   12.3400
Run Code Online (Sandbox Code Playgroud)

冒号10.4f后面:格式说明,其中10是整数的字符宽度(包括空格),第二个数字4是小数位数,f代表浮点数。

也可以使用变量而不是硬编码宽度和小数位数:

>>> number = 12.34
>>> width = 10
>>> decimals = 4
>>> print(f"{number:{width}.{decimals}f}")
   12.3400
Run Code Online (Sandbox Code Playgroud)


小智 11

这将打印76.66

print("Number: ", f"{76.663254: .2f}")
Run Code Online (Sandbox Code Playgroud)


elc*_*mon 10

您也可以用零左填充。例如,如果你想要number9 个字符的长度,用零填充左使用:

print('{:09.3f}'.format(number))

因此,如果number = 4.656,输出为:00004.656

对于您的示例,输出将如下所示:

numbers  = [23.2300, 0.1233, 1.0000, 4.2230, 9887.2000]
for x in numbers: 
    print('{:010.4f}'.format(x))
Run Code Online (Sandbox Code Playgroud)

印刷:

00023.2300
00000.1233
00001.0000
00004.2230
09887.2000
Run Code Online (Sandbox Code Playgroud)

这可能有用的一个示例是当您想要按字母顺序正确列出文件名时。我注意到在一些 linux 系统中,数字是:1,10,11,..2,20,21,...

因此,如果您想在文件名中强制执行必要的数字顺序,您需要用适当数量的零填充左。


小智 8

请参阅Python 3.x 格式字符串语法:

IDLE 3.5.1   
numbers = ['23.23', '.1233', '1', '4.223', '9887.2']

for x in numbers:  
    print('{0: >#016.4f}'. format(float(x)))  

     23.2300
      0.1233
      1.0000
      4.2230
   9887.2000
Run Code Online (Sandbox Code Playgroud)