Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python通用数字格式化行为_Python - Fatal编程技术网

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))