我正在使用常规格式化选项将浮点数打印为字符串,但我发现这种行为有点不寻常。例如,指定精度(小数点后的位数)时: 对于浮动格式:
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;
答案 0 :(得分:1)
精度是十进制数,表示应该有多少位数 在格式化浮点值的小数点后显示 使用'f'和'F',或浮点数小数点之前和之后 用'g'或'G'格式化的点值。对于非数字类型的字段 表示最大字段大小 - 换句话说,字符数 将从现场内容中使用。不允许精度 整数值。
(强调补充)
这是预期的行为。
我不相信有一种方法可以只使用字符串格式来获得一个有效数字(你似乎想要的)。 3>}是必需的。{/ 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