自定义数字格式字符串

你可以创建自定义数字格式字符串,这种字符串由一个或多个自定义数字说明符组成,用于定义设置数值数据格式的方式。 自定义数字格式字符串是非标准数值格式字符串 的任何格式字符串

下表描述自定义数字格式说明符并显示由每个格式说明符产生的示例输出。 有关使用自定义数字格式字符串的其他信息,请转到说明”部分,获取有关其用法的完整说明的示例部分。

格式说明符 “属性” 说明 示例
“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'

"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,,”对数字 100000000 进行格式化,则输出为“100”。

可以在同一格式字符串中使用组分隔符和数字比例换算说明符。 例如,如果使用字符串“#,0,,”和固定区域性对数字 1000000000 进行格式化,则输出为“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”以及 + 和 - 符号也可以解释为格式说明符。

若要防止将字符解释为格式说明符,可以:

  • 将其前面加上反斜杠。
  • 用单引号括起来。
  • 用两个双引号包围它。

其中每个字符都充当转义字符。 转义字符表示以下字符为应包含在未更改的结果字符串中的字符文本。

若在要结果字符串中包括反斜杠,必须使用另一个反斜杠 (\\) 对其转义。

若要在结果字符串中包含单引号,必须使用反斜杠(\')对其进行转义。 如果未转义的另一个单引号位于转义单引号之前,则会改为显示反斜杠('\' 显示 \)。

若要在结果字符串中包含双引号,必须使用反斜杠()转义其中两个引号。\""

下面的示例使用转义字符来防止格式设置操作将“#”、“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.TypeSingle.TypeDouble.Type 浮点类型的值为正无穷大、负无穷大或非数字(NaN),则格式化字符串是当前适用区域性指定的相应 Number.PositiveInfinityNumber.NegativeInfinityNumber.NaN 常量的值。

舍入和定点格式字符串

对于固定点格式字符串(即不包含科学表示法格式字符的格式字符串),数字将舍入为小数点右侧的数字占位符数。 如果格式字符串不包含小数点,则数字将舍入为最接近的整数。 如果数字位数多于小数点左边数字占位符的个数,多余的数字被复制到结果字符串中紧挨着第一个数字占位符的前面。

返回表首

示例

下面的示例演示两个自定义数字格式字符串。 在这两个示例中,数字占位符 (#) 显示数值数据,且所有其他字符被复制到结果字符串。

let
    Source =
    {
        Number.ToText(1234567890, "(###) ###-####"),
        // Displays (123) 456-7890

        Number.ToText(42, "My Number = #")
        // Displays My number = 42
    }
in
    Source

返回表首