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

496 投票
11 回答
965147 浏览
提问于 2025-04-17 10:23

我想把一个浮动的数字格式化成固定宽度,具体要求如下:

  1. 如果数字小于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

11 个回答

49

在Python3中,下面的代码可以正常运行:

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

这个问题已经有几年没更新了,但从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
702
numbers = [23.23, 0.1233, 1.0, 4.223, 9887.2]                                                                                                                                                   
                                                                                                                                                                                                
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 是打印字段的总宽度,左边用空格填充。
  • 4 是小数点后面的数字位数。

撰写回答