如何在Python中格式化一个固定宽度的浮点数

如何将浮点数格式化为固定宽度,具体要求如下:

  1. 如果n <,前导零;1
  2. 添加尾随小数零(s)以填充固定宽度
  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
831927 次浏览
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格式字符串语法之后。具体来说,在本例中,它由以下部分组成:

  • 冒号前的空字符串表示“将下一个提供的参数取为__abc0”。-在这种情况下,x作为唯一的参数。
  • 冒号后面的10.4f部分是格式规范
  • f表示定点符号。
  • 10是被打印字段的总宽度,由空格填充。
  • 4是小数点后的位数。

在python3中,以下工作:

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

参见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

在Python 3中。

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

6.1f表示点号后1位数字,如果在点号后打印2位数字,则应该只打印%6.2f,以便在点号后打印%6.3f 3位数字。

这个问题已经回答了几年了,但从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

你也可以留下零。例如,如果你想让number有9个字符的长度,左边用0填充,使用:

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,…

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

对于数组,我需要一些类似的东西。这帮助了我

some_array_rounded=np.around(some_array, 5)

这将打印76.66:

print("Number: ", f"{76.663254: .2f}")

我试过了所有的方法,比如

  1. pd.options.display.float_format = '{:.4f}'.format
  2. pd.set_option('display.float_format', str)
  3. pd.set_option('display.float_format', lambda x: f'%.{len(str(x%1))-2}f' % x)
  4. pd.set_option('display.float_format', lambda x: '%.3f' % x)

但对我来说什么都不管用。

因此,当将变量/值(var1)分配给变量(例如num1)时,我使用round(val,5)

num1 = round(var1,5)

这是一个粗糙的方法,因为你必须在每次赋值中使用这个循环函数。但这可以确保你控制事情的发生,并得到你想要的。

使用f-string文字:

>>> number = 12.34
>>> print(f"{number}")
12.34
>>> print(f"{number:10f}")
12.340000
>>> print(f"{number:10.4f}")
12.3400

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

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

>>> number = 12.34
>>> width = 10
>>> decimals = 4
>>> print(f"{number:{width}.{decimals}f}")
12.3400