Python一般数字格式化行为

时间:2014-11-22 11:47:56

标签: python

我正在使用常规格式化选项将浮点数打印为字符串,但我发现这种行为有点不寻常。例如,指定精度(小数点后的位数)时: 对于浮动格式:

In [1]: '%f' % 123.456
Out[1]: '123.456000'

In [2]: '%.1f' % 123.456
Out[2]: '123.5'

按预期工作。现在,将其与以下内容进行比较:

In [3]: '%g' % 123.456
Out[3]: '123.456'

In [4]: '%.1g' % 123.456
Out[4]: '1e+02'

甚至更糟:

In [6]: '%5g' % 123.456
Out[6]: '123.456'

In [7]: '%.5g' % 123.456
Out[7]: '123.46'

似乎将“精确”值表示为“宽度”。这是一个错误,还是预期的行为?

聚苯乙烯。我想要的是用最少的字符打印浮点数(达到给定的精度)。例如:0.301238,精度为1,打印为0.3;精度为100.0003,打印为100;

1 个答案:

答案 0 :(得分:1)

The formatting spec州:

  

精度是十进制数,表示应该有多少位数   在格式化浮点值的小数点后显示   使用'f'和'F',或浮点数小数点之前和之后   用'g'或'G'格式化的点值。对于非数字类型的字段   表示最大字段大小 - 换句话说,字符数   将从现场内容中使用。不允许精度   整数值。

(强调补充)

这是预期的行为。

我不相信有一种方法可以只使用字符串格式来获得一个有效数字(你似乎想要的)。 }是必需的。{/ 3>

>>> from math import log10, floor
>>> def round_to_1(x):
...    return round(x, -int(floor(log10(x))))
...
>>> "{:g}".format(round_to_1(0.301238))
0.3
>>> "{:g}".format(round_to_1(100.0003))
100