使用%.*g的Python数字打印格式
我在网上找到了这个python示例,我想确切了解数字格式的工作原理:使用%.*g的Python数字打印格式,python,string-formatting,Python,String Formatting,我在网上找到了这个python示例,我想确切了解数字格式的工作原理: print "%.*g\t%.*g" % (xprecision, a, yprecision, b) 我可以通过实验看到,它打印a(精度为xprecision)、a选项卡,然后是b(精度为yprecision)。举个简单的例子,如果我 print "%.*g\t%.*g" % (5, 2.23523523, 3, 12.353262) 然后我得到 2.2352 12.4 我了解%g通常是如何工作的。我也了解%的一般工
print "%.*g\t%.*g" % (xprecision, a, yprecision, b)
我可以通过实验看到,它打印a(精度为xprecision)、a选项卡,然后是b(精度为yprecision)。举个简单的例子,如果我
print "%.*g\t%.*g" % (5, 2.23523523, 3, 12.353262)
然后我得到
2.2352 12.4
我了解%g
通常是如何工作的。我也了解%
的一般工作原理。在这个例子中,让我困惑的是构造%.*g
。*
在这里是如何工作的?我可以看出,它以某种方式获取所需的精度值,并将其替换到打印表达式中,但为什么会发生这种情况?为什么在(xprecision,a…)中格式化的数字之前会出现精度数字
有人能把这个分解一下并给我解释一下吗?*
是一个尺寸占位符。它告诉格式化操作从右侧元组中获取下一个值,并将其用作精度
在您的示例中,第一个插槽的“下一个”值为5
,因此您可以将其读取为%.5g
,用于格式化2.23523523
。第二个插槽使用3
作为宽度,因此变为%.3g
以格式化12.353262
见:
转换说明符包含两个或多个字符,并具有以下组件,这些组件必须按此顺序出现:
(……)
“*”
(星号),则实际宽度从值中元组的下一个元素读取,要转换的对象位于最小字段宽度和可选精度之后”。
(点),后跟精度。如果指定为“*”
(星号),则从值中元组的下一个元素读取实际宽度,要转换的值位于精度之后因此,最小宽度和精度都可以通过
*
变为变量,并且文档明确说明要转换的值位于宽度和精度之后。在格式规范中,每个项目都有字段宽度。大多数情况下,它是一个常数:
The value is %.16g
但字段宽度/精度也可以是变量。*
表示用格式列表中的下一个整数替换splat
如果要格式化的值之前有一个16
,则将执行相同的操作:
"The value is %.*g" % (16, 14.372492384472)
太好了,谢谢!这是否意味着无法同时指定最小字段宽度和精度?@EPH不,只需使用两个
*
字符:%*.*g
哇,太酷了!指定字段宽度和精度将帮助我保持打印文件中的列整齐排列。谢谢
"The value is %.*g" % (16, 14.372492384472)