[英]Python number print formatting using %.*g
我在網上找到了這個python示例,我想確切地了解數字格式的工作原理:
print "%.*g\t%.*g" % (xprecision, a, yprecision, b)
我可以通過實驗看到,它先打印a(精度為xprecision),一個制表符,然后再打印b(精度為yprecision)。 因此,作為一個簡單的例子,如果我運行
print "%.*g\t%.*g" % (5, 2.23523523, 3, 12.353262)
然后我得到
2.2352 12.4
我了解%g
通常如何工作。 我也了解%
一般如何運作。 在這個例子中讓我感到困惑的是構造%.*g
。 *
在這里如何工作? 我可以看到它以某種方式采用了所需的精度值並將其替換為打印表達式,但是為什么會這樣呢? 為什么精度數字出現在要格式化的數字之前(xprecision,a ...)?
有人可以分解並向我解釋嗎?
*
是大小占位符 。 它告訴格式化操作從右側元組中獲取下一個值,並將其用作精度。
在您的示例中,第一個插槽的“ next”值為5
,因此您可以將其讀取為%.5g
,該格式用於格式化2.23523523
。 第二個插槽使用3
作為寬度,因此變成%.3g
12.353262
來格式化12.353262
。
請參閱字符串格式操作文檔 :
轉換說明符包含兩個或多個字符,並具有以下組件,這些組件必須按此順序出現:
(...)
最小字段寬度(可選)。 如果指定為
'*'
(星號),則會從元組的下一個元素讀取值中的實際寬度,並且要轉換的對象位於最小字段寬度和可選精度之后。精度(可選),以
'.'
(點)后跟精度。 如果指定為'*'
(星號),則從值的元組的下一個元素讀取實際寬度,並且要轉換的值位於精度之后。
因此最小寬度和精度都可以用*
進行變量設置,文檔明確指出要轉換的值在寬度和精度之后 。
在格式規范中,每個項目都有字段寬度。 在大多數情況下,它是一個常數:
The value is %.16g
但是字段寬度/精度也可以是變量。 *
表示將splat替換為格式列表中的下一個整數 。
The value is %.*g
如果要格式化的值前面有16
,將執行相同的操作:
"The value is %.*g" % (16, 14.372492384472)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.