Python通用数字格式化行为
我使用常规格式选项将浮点打印为字符串,但我发现这种行为有些不寻常。例如,指定精度时(小数点后的位数): 对于浮点格式:Python通用数字格式化行为,python,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 [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'
它似乎将“精度”值表示为“宽度”。这是一个bug,还是预期的行为
我想要的是用最少的字符打印浮点数(达到给定的精度)。例如:精度为1的0.301238打印为0.3;100.0003,精度1打印为100 指出:
精度是一个十进制数字,指示应输入多少位数
对于已格式化的浮点值,显示在小数点后
带“f”和“f”,或浮点数的小数点前后
点值格式为“g”或“g”。对于非数字类型,请单击该字段
指示最大字段大小-换句话说,有多少个字符
将从字段内容中使用。精度是不允许的
整数值
(增加重点)
这是预期的行为
我不相信有一种方法可以只使用字符串格式来获取一个有效数字(您似乎想要的)。这是必需的
>>> 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
值得注意的是,在Python中使用的是比
%
格式更强大、更易于阅读的方法。明白了,在示例中,为了可读性,只使用了%格式。使用format()!谢谢你的解决方案!您可以使用lambda n,p:'{:g}.格式(round(n,p))