1

我想在小数点左侧打印一系列带有不同数量数字的浮点数。我希望这些数字能够用空格、数字和小数点精确填充填充。

解释我现在拥有的数据和代码

floats = [321.1234561, 21.1234561, 1.1234561, 0.123456, 0.02345, 0.0034, 0.0004567]
for number in floats:
    print('{:>8.6f}'.format(number))

这输出

321.123456
21.123456
1.123456
0.123456
 0.02345
  0.0034
0.000457

我正在寻找一种在 for 循环中打印以下内容的方法,假设我不知道小数点左侧的位数并且左侧的位数永远不会超过填充 8这个例子。

321.1234
21.12345
1.123456
0.123456
 0.02345
  0.0034
0.000457

关于打印具有一定宽度的浮点的类似问题已经被问到,但他们所谈论的宽度似乎是精度而不是用于打印数字的字符总数。

编辑:出于以下原因,我在列表末尾添加了一个数字。'g'attdona 建议使用具有 7 个有效数字的说明符。这可以防止大于或等于 1 的数字超出填充,但对于精度大于 6 的小于 1 的数字则不会超出填充{:>8.7g}

321.1234
21.12345
1.123456
0.123456
 0.02345
  0.0034
0.0004567

唯一超过填充的地方是新添加的。

4

2 回答 2

0
for i in floats:
      print('{:>8}'.format(f'{i:{8}.{8-len(str(int(i)))-1}f}'.rstrip('0')))
321.1235
21.12346
1.123456
0.123456
 0.02345
  0.0034
于 2019-02-20T06:58:53.203 回答
0

使用通用格式类型说明符g

'{:>8.7g}'.format(number)

参考:https ://docs.python.org/3/library/string.html#format-specification-mini-language

更新:对于小数字,这种格式无法正确对齐。在这种情况下,您可以采用混合方法,但请记住,非常小的数字会四舍五入为零

for number in floats:
    fstr = '{:>8.7g}'.format(number)
    if len(fstr) > 8:
        fstr = '{:>8.6f}'.format(number)
    print(fstr)
于 2019-02-20T06:59:16.490 回答