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


322

如何按照以下要求将浮点数格式化为固定宽度:

  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)

输出会像

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000

Answers:


500
for x in numbers:
    print "{:10.4f}".format(x)

版画

   23.2300
    0.1233
    1.0000
    4.2230
 9887.2000

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

  • 空字符串冒号前的手段“采取下一个提供参数format()” -在这种情况下,x作为唯一的参数。
  • 10.4f冒号之后的部分是格式规范
  • f表示定点表示法。
  • 10是该领域的总宽度被印刷,用空格lefted-填充。
  • 4是小数点后的位数。

12
因此,我知道4f代表将小数限制为4(带零尾),但是10表示什么?这是否意味着该格式不适用于大于9999999999(十个9)的整数?只是好奇。
hobbes3 2012年

55
10.4表示宽度为10个字符,精度为4个小数位。
MRAB 2012年

13
@ hobbes3:10是最小字段宽度,即打印字符串的最小长度。默认情况下,数字会右对齐并用空格填充- 有关更多详细信息,请参阅文档
Sven Marnach 2012年

9
对于2.7之前的Python:("%0.4f" % x).rjust(10)
Steven Rumbalski 2012年

22
@StevenRumbalski:或者简单地"%10.4f" % x。在Python 2.6中,您也可以使用"{0:10.4f}".format(x)
Sven Marnach 2012年

88

自从这个答案问了已经好几年了,但是从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}')

印刷品:

  23.2300
   0.1233
   1.0000
   4.2230
9887.2000

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

37

在python3中,以下工作原理:

>>> v=10.4
>>> print('% 6.2f' % v)
  10.40
>>> print('% 12.1f' % v)
        10.4
>>> print('%012.1f' % v)
0000000010.4

在过去的4年中,这种情况发生了变化,现在%格式化是最古老的格式化方法。由于多种原因,使用str.formatf-strings优于%。在此之前str.format,人们只是出于某种原因而已f-strings修复了该漏洞。格式小型语言文档从文档str.format例子在文档F-字符串文字例子
ninMonkey

10

请参阅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

6

您也可以将零填充为零。例如,如果您number要有9个字符的长度,请用零左填充,请使用:

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))

印刷品:

00023.2300
00000.1233
00001.0000
00004.2230
09887.2000

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

因此,如果要在文件名中强制执行必要的数字顺序,则需要在键盘上填充适当数量的零。


2

在Python 3中。

GPA = 2.5
print(" %6.1f " % GPA)

6.1f点之后手段1个数字显示,如果你,你应该只点打印后2位%6.2f,使得%6.3f3位点后打印。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.