python字符串格式化固定宽度

python string formatting fixed width

我想把一堆浮点数放到一个固定宽度的表中。也就是说,我希望最多使用12个字符。我需要至少使用10位小数(如果可用);但是,如果10位小数使其占用超过12个字符,则四舍五入。我最初的想法是尝试这样的东西

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# I only want 12 characters used total

num1 = 0.04154721841
num2 = 10.04154721841

# not what I want
print"{:<12.11g}".format((num1))
# what I want
print"{:<12.10f}".format((num1))

# not what I want
print"{:<12.10f}".format((num2))
# what I want
print"{:<12.11g}".format((num2))

必须有一种方法来实现这一点,而不需要编写一个函数来检查每个数字,并根据上述条件给出格式设置。我错过了什么?


我不确定这是您要找的,因为它不是完全用格式字符串完成的,但是,当事情变得太长时,您可以使用字符串切片来去掉尾随字符:

1
2
3
4
5
6
7
num1 = 0.04154721841
num2 = 10.04154721841
num3 = 1002.04154721841

print"{0:<12.11g}".format(num1)[:12]
print"{0:<12.11g}".format(num2)[:12]
print"{0:<12.11g}".format(num3)[:12]

输出:

1
2
3
0.0415472184
10.041547218
1002.0415472

除此之外,我想说你应该只写一个函数,尽管我不是str.format东西的专家,所以我可能遗漏了一些东西。