自訂數值格式字串
您可以建立由一個或多個自訂數值規範所組成的自訂數值格式字串,以定義如何格式化數值資料。 自訂數值格式字串是非 標準數值格式字串的任何格式字串。
下表說明自訂數值格式規範,並顯示每個格式範例所產生的範例輸出。 如需使用自定義數值格式字串的其他資訊,請移至 [附註] 區段,以取得其使用的完整說明。
格式規範 | 名稱 | 描述 | 範例 |
---|---|---|---|
"0" | 零值預留位置 | 以對應的數字 (如果有的話) 取代零,否則結果字串中會出現零。 詳細資訊: "0" 自訂規範。 |
1234.5678 (“00000”) -> 01235 0.45678 (“0.00”, en-US) -> 0.46 0.45678 (“0.00”, fr-FR) -> 0,46 |
"#" | 數字預留位置 | 將 "#" 符號取代為對應的數字 (如果有的話),否則結果字串中不會出現任何數字。 如果輸入字串中的對應數位不是顯著 0,則結果字串中不會顯示任何數位。 例如,0003 (“####”) -> 3。 詳細資訊: "#" 自訂規範。 |
1234.5678 (“#####”) -> 1235 0.45678 (“#.##”, en-US) -> .46 0.45678 (“#.##”, fr-FR) -> ,46 |
"." | 小數點 | 決定結果字串中小數點的位置。 詳細資訊: "."自訂規範。 |
0.45678 (“0.00”, en-US) -> 0.46 0.45678 (“0.00”, fr-FR) -> 0,46 |
"," | 群組分隔符號和數值範圍 | 同時做為群組分隔符號和數值縮放規範。 如果做為群組分隔符號,則會在每個群組之間插入當地語系化群組分隔符號字元。 做為數值縮放規範時,每指定一個逗號就會將數字除以 1000。 詳細資訊: "," 自訂規範。 |
群組分隔符號規範: 2147483647 (“##,#”, en-US) -> 2,147,483,647 2147483647 (“#,#”, es-ES) -> 2.147.483.647 縮放規範: 2147483647 (“#,#,,”, en-US) -> 2,147 2147483647 (“#,#,,”, es-ES) -> 2.147 |
"%" | 百分比預留位置 | 將數字乘以 100,並在結果字串中插入當地語系化的百分比符號。 詳細資訊: "%" 自訂規範。 |
0.3697 (“%#0.00”, en-US) -> %36.97 0.3697 (“%#0.00”, el-GR) -> %36,97 0.3697 (“##.0 %”, en-US) -> 37.0 % 0.3697 (“##.0 %”, el-GR) -> 37,0 % |
"‰" | 千分之一符號預留位置 | 將數字乘以 1000,並在結果字串中插入當地語系化的千分比符號。 詳細資訊: "‰" 自訂規範。 |
0.03697 (“#0.00\”, en-US) -> 36.97* 0.03697 (“#0.00\”, ru-RU) -> 36,97* |
"E0" "E+0" "E-0" "E0" "E+0" "E-0" |
指數標記法 | 如果後面至少接著一個 0 (零),則使用指數標記法來格式化結果。 大小寫 "E" 或 "e" 表示結果字串中指數符號的大小寫。 接在 "E" 或 "e" 字元後面的零個數決定指數中的最少位數。 加號 (+) 表示指數前面一律加上正負號字元。 減號 (-) 表示只在負指數前面才加上正負號字元。 詳細資訊: "E" 和 "e" 自訂規範。 |
987654 (“#0.0e0”) -> 98.8e4 1503.92311 (“0.0##e+00”) -> 1.504e+03 1.8901385E-16 (“0.0e+00”) -> 1.9e-16 |
"\", "''", """" | 逸出字元 | 將下一個字元或字元解譯為常值,而不是自定義格式規範。 詳細資訊: 逸出字元。 |
987654 (“\###00\#”) -> #987654# 987654 (“'#'##00'#'”) -> #987654# 987654 (“”“#”“##00”“#”“”“) -> #987654# |
'字串' "string" |
常值字串分隔符號 | 表示應該將所括住的字元原封不動地複製到結果字串。 詳細資訊︰字元常值。 |
68 (“# 'degrees'”) -> 68 度 68 (“#' degrees'”) -> 68 度 |
; | 區段分隔符號 | 以個別格式字串來定義正數、負數和零值的區段。 詳細資訊: ";" 區段分隔符號。 |
12.345 ("#0.0#;(#0.0#;-\0-“) -> 12.35 0 ("#0.0#;(#0.0#;-\0-“) -> -0- -12.345 ("#0.0#;(#0.0#;-\0-“) -> (12.35) 12.345 ("#0.0#;(#0.0#)“) -> 12.35 0 ("#0.0#;(#0.0#)“) -> 0.0 -12.345 ("#0.0#;(#0.0#)“) -> (12.35) |
其他 | 所有其他字元 | 字元會原封不動地複製到結果字串。 詳細資訊︰字元常值。 |
68 (“# °”) -> 68 ° |
下列各節提供每個自訂數值格式規範的詳細資訊。
"0" 自訂規範
"0" 自訂格式規範是當做零預留位置符號。 如果正在格式化的值有數字位於格式字串中出現零的位置上,則該數字會複製到結果字串,否則結果字串中會出現零。 小數點前最左邊的零和小數點後最右邊的零位置,決定要一直在輸出字串中出現的位數範圍。
"00" 規範會造成數值捨入至最接近的小數點前面數值,而其中永遠使用遠離零的捨入方式。 例如,使用 "00" 格式化 34.5 將會得到值 35。
下列範例顯示使用包含零預留位置的自訂格式字串來格式化的幾個值。
let
Source =
{
Number.ToText(123, "00000", ""),
// Displays 00123
Number.ToText(1.2, "0.00", ""),
// Displays 1.20
Number.ToText(1.2, "00.00", ""),
// Displays 01.20
Number.ToText(1.2, "00.00", "da-DK"),
// Displays 01,20
Number.ToText(.56, "0.0", ""),
// Displays 0.6
Number.ToText(1234567890, "0,0", ""),
// Displays 1,234,567,890
Number.ToText(1234567890, "0,0", "el-GR"),
// Displays 1.234.567.890
Number.ToText(1234567890.123456, "0,0.0", ""),
// Displays 1,234,567,890.1
Number.ToText(1234.567890, "0,0.00", "")
// Displays 1,234.57
}
in
Source
注意
上一個範例中最後一個參數中 Number.ToText 的空白文字值 (“”) 是指不因文化特性而異。
"#" 自訂規範
"#" 自訂格式規範是當做數字預留位置符號。 如果正在格式化的值有數字位於格式字串中出現 "#" 符號的位置上,則該數字會複製到輸出字串。 否則,沒有東西會存放在結果字串中的那個位置。
請注意,即使零是字串中唯一的數字,這個規範永遠不會顯示不是有效位數的零。 只有當它是所顯示數位中的有效位數時,才會顯示零。
"##" 格式字串會造成數值捨入至最接近的小數點前面數值,而其中永遠使用遠離零的捨入方式。 例如,使用 "##" 格式化 34.5 將會得到值 35。
下列範例顯示使用包含數字預留位置的自訂格式字串來格式化的幾個值。
let
Source =
{
Number.ToText(1.2, "#.##", ""),
// Displays 1.2
Number.ToText(123, "#####"),
// Displays 123
Number.ToText(123456, "[##-##-##]"),
// Displays [12-34-56]
Number.ToText(1234567890, "#"),
// Displays 1234567890
Number.ToText(1234567890, "(###) ###-####")
// Displays (123) 456-7890
}
in
Source
若要傳回以空格取代不存在數位或前置零的結果字串,請使用 Text.PadStart 並指定欄位寬度,如下列範例所示。
let
Source = Text.Format("The value is: '#{0}'", {Text.PadStart(Number.ToText(.324, "#.###"), 5)})
in
Source
// The example displays the following output if the current culture
// is en-US:
// The value is: ' .324'
"." 自訂規範
"." 自訂格式規範會將當地語系化的十進位分隔符號插入結果字串中。 格式字串中第一個點決定所格式化值中的小數分隔符號位置;任何其他點將被忽略。 如果格式規範以 「結尾,則只會將有效位數格式化為結果字串。
做為結果字串中小數分隔符的字元不一定是句號;它是由控制格式的文化特性所決定。
下列範例使用 "." 格式規範來定義幾個結果字串中小數點的位置。
let
Source =
{
Number.ToText(1.2, "0.00", ""),
// Displays 1.20
Number.ToText(1.2, "00.00", ""),
// Displays 01.20
Number.ToText(1.2, "00.00", "da-DK"),
// Displays 01,20
Number.ToText(.086, "#0.##%", ""),
// Displays 8.6%
Number.ToText(Double.From(86000), "0.###E+0", "")
// Displays 8.6E+4
}
in
Source
"," 自訂規範
"," 字元同時當做群組分隔符號和數值縮放規範。
群組分隔符號:如果在用於格式化數字整數位數的兩個數字預留位置 (0 或 #) 之間指定一個或多個逗號,則會在輸出的整數部分中在每個數字群組之間插入群組分隔符號字元。
文化特性會決定用來做為數位群組分隔符的字元,以及每個數位群組的大小。 例如,如果使用字串 "#,#" 和不變的文化特性來格式化數字 1000,則輸出為 "1,000"。
數值縮放規範:如果在明確或隱含小數點的左側緊接著指定一個或多個逗號,則每指定一個逗號就會將要格式化的數字除以 1000。 例如,如果使用字串 "0,," 來格式化數字 1 億,則其輸出為 "100"。
您可以在相同的格式字串內使用群組分隔符號和數值縮放規範。 例如,如果使用字串 "#,0,," 和不變的文化特性來格式化數字 10 億,則輸出為 "1,000"。
下列範例示範使用逗號做為群組分隔符號。
let
Source =
{
Number.ToText(1234567890, "#,#", ""),
// Displays 1,234,567,890
Number.ToText(1234567890, "#,##0,,", "")
// Displays, 1,235
}
in
Source
下列範例示範使用逗點做為數值縮放的規範。
let
Source =
{
Number.ToText(1234567890, "#,,", ""),
// Displays 1235
Number.ToText(1234567890, "#,,,", ""),
// Displays 1
Number.ToText(1234567890, "#,##0,,", "")
// Displays 1,235
}
in
Source
"%" 自訂規範
格式字串中的百分比符號 \ 會導致數位在格式化之前乘以 100。 數字中會根據格式字串中出現 % 的位置,插入當地語系化百分比符號。 所使用的百分比字元是由文化特性所定義。
下列範例會定義包含 「%」 自訂規範的自訂格式字串。
let
Source = Number.ToText(.086, "#0.##%", "")
// Displays 8.6%
in
Source
"‰" 自訂規範
格式字串中每千米字元 (} 或 \u2030) 會導致數位在格式化之前乘以 1000。 傳回的字串中會根據格式字串中出現 ‰ 符號的位置,插入適當的千分比符號。 所使用的每千米字元是由文化特性所定義,可提供特定文化特性的格式資訊。
下列範例會定義包含 "‰" 自訂規範的自訂格式字串。
let
Source = Number.ToText(.00354, "#0.##" & Character.FromNumber(0x2030), "")
// Displays 3.54‰
in
Source
"E" 和 "e" 自訂規範
如果 "E"、"E+"、"E-"、"e"、"e+" 或 "e-" 中的任何一個字串出現在格式字串中,且後面至少緊接著一個零,則會使用科學標記法來格式化數字,並在數字和指數之間插入 "E" 或 "e"。 接在科學標記法指標之後的零個數決定要在指數部分輸出的最少位數。 "E+" 和 "e+" 格式表示指數前面應該一律加上加號或減號。 "E"、"E-"、"e" 或 "e-" 格式表示只應該在負數指數前面加上正負號字元。
下列範例使用科學記號規範來格式化幾個數值。
let
Source =
{
Number.ToText(86000, "0.###E+0", ""),
// Displays 8.6E+4
Number.ToText(86000, "0.###E+000", ""),
// Displays 8.6E+004
Number.ToText(86000, "0.###E-000", "")
// Displays 8.6E004
}
in
Source
逸出字元
格式字串中的 "#"、"0"、"."、","、"%" 和 "‰" 符號會解譯為格式規範,而不是常值字元。 根據其在自定義格式字串中的位置,大寫和小寫 “E” 以及 + 和 - 符號也可以解譯為格式規範。
若要防止字元解譯為格式規範,您可以:
- 在前面加上反斜杠。
- 以單引弧括住它。
- 以兩個雙引弧括住它。
每個字元都會做為逸出字元。 逸出字元表示接下來的字元是字元常值,應該原封不動地放入結果字串中。
若要在結果字串中加上反斜線,您必須再加上一個反斜線 (變成 \\
),才能將反斜線解譯為常值。
若要在結果字串中包含單引號,您必須使用反斜杠逸出它 (\'
)。 如果未逸出的另一個單引號在逸出的單引號之前,則會改為顯示反斜杠 ('\'
display \
)。
若要在結果字串中包含雙引號,您必須使用反斜杠逸出其中兩個引號 (\""
)。
下列範例會使用逸出字元來防止格式化作業將 “#”、“0” 和 “” 字元解譯為逸出字元或格式規範。
let
Source =
{
Number.ToText(123, "\#\#\# ##0 dollars and \0\0 cents \#\#\#"),
// Displays ### 123 dollars and 00 cents ###
Number.ToText(123, "'###' ##0 dollars and '00' cents '###'"),
// Displays ### 123 dollars and 00 cents ###
Number.ToText(123, """###"" ##0 dollars and ""00"" cents ""###"""),
// Displays ### 123 dollars and 00 cents ###
Number.ToText(123, "\\\\\\ ##0 dollars and \0\0 cents \\\\\\"),
// Displays \\\ 123 dollars and 00 cents \\\
Number.ToText(123, "'\\\' ##0 dollars and '00' cents '\\\'"),
// Displays \\\ 123 dollars and 00 cents \\\
Number.ToText(123, """\\\"" ##0 dollars and ""00"" cents ""\\\""")
// Displays \\\ 123 dollars and 00 cents \\\
}
in
Source
";" 區段分隔符號
冒號 (;) 是條件式格式規範,這個規範會根據數字的值是正數、負數還是零,將不同的格式套用至數字。 若要產生這個行為,自訂格式字串可以包含多達三個以分號分隔的區段, 下表將說明這些區段。
區段數 | 描述 |
---|---|
一個區段 | 此格式字串適用於所有的值。 |
兩個區段 | 第一個區段適用於正數值及零值,第二個區段適用於負數值。 如果要格式化的數字為負數,但依照第二個區段的格式四捨五入之後成為零,則產生的零會依照第一個區段來格式化。 |
三個區段 | 第一個區段適用於正數值,第二個區段適用於負數值,而第三個區段則適用於零值。 第二個區段可留白 (分號之間沒有任何內容),此時第一個區段將套用到所有非零值。 如果要格式化的數字不是零,但依照第一個或第二個區段的格式四捨五入之後成為零,則產生的零會依照第三個區段來格式化。 |
區段分隔符號會在最終值已格式化時,忽略任何事先存在而與數值相關的格式。 例如,負數值在使用區段分隔符號時永遠不以負號來顯示。 如果您想要最終的格式化值具有負號,您應該明確包含負號做為自訂格式規範的一部分。
下列範例會使用 ";" 格式規範,以不同方式格式化正數、負數和零。
let
Source =
{
Number.ToText(1234, "##;(##)"),
// Displays 1234
Number.ToText(-1234, "##;(##)"),
// Displays (1234)
Number.ToText(0, "##;(##);**Zero**")
// Displays **Zero**
}
in
Source
字元常值
自訂數值格式字串中出現的格式規範一律會解譯為格式字元,永遠不會解譯為常值字元。 這包含下列字元:
所有其他字元一律會解譯為字元常值,並在格式化作業中,原封不動地包含在結果字串中。 在剖析作業中,它們必須完全符合輸入字串中的字元;這項比較會區分大小寫。
下列範例說明常值字元單位 (在此案例中為千分位) 的一個常見用法:
let
Source = Number.ToText(123.8, "#,##0.0K")
// Displays 123.8K
in
Source
您可以使用兩種方式來指定將字元解譯為常值字元,而不是格式字元,以便包含在結果字串中,或在輸入字串中成功剖析:
逸出格式字元。 如需詳細資訊,請移至 逸出字元。
以引號括住整個常值字串。
下列範例會使用這兩種方法,在自訂數值格式字串中包含保留的字元。
let
Source =
{
Number.ToText(9.3, "##.0\%"),
// Displays 9.3%
Number.ToText(9.3, "\'##\'"),
// Displays '9'
Number.ToText(9.3, "\\##\\"),
// Displays \9\
Number.ToText(9.3, "##.0'%'"),
// Displays 9.3%
Number.ToText(9.3, "'\'##'\'"),
// Displays \9\
Number.ToText(9.3, "##.0""%"""),
// Displays 9.3%
Number.ToText(9.3, "\""##\""")
// Displays "9"
}
in
Source
備註
無限浮點數和 NaN
不論格式字串為何,如果 Decimal.Type
、Single.Type
或 Double.Type
浮點類型為正無限大、負無限大或非數位 (NaN),格式化字串是目前適用文化特性所指定之個別 Number.PositiveInfinity、Number.NegativeInfinity或 Number.NaN 常數的值。
四捨五入和定點格式字串
對於固定點格式字串(也就是不包含科學表示法格式字元的格式字元串),數位會四捨五入為小數點右邊的數位佔位元數目。 如果格式字串不包含小數點,數位會四捨五入為最接近的整數。 如果數值有比小數點左邊的數字預留位置還要多的位數,額外位數會緊接第一個數字預留位置之前複製到輸出字串。
範例
下列範例示範兩個自訂數值格式字串。 在這兩個範例中,數字預留位置 (#
) 會顯示數值資料,而所有其他字元則會複製到結果字串中。
let
Source =
{
Number.ToText(1234567890, "(###) ###-####"),
// Displays (123) 456-7890
Number.ToText(42, "My Number = #")
// Displays My number = 42
}
in
Source
相關內容
- 文化特性如何影響文字格式設定
- 數位類型轉換
- Power Query 中的數據類型
- 標準數值格式字串 \(部分機器翻譯\)