Поделиться через


Строки настраиваемых числовых форматов

Чтобы определить способ форматирования числовых данных, можно создать строку настраиваемого числового формата, состоящую из одного или нескольких описателей настраиваемого формата. Строка настраиваемого числового формата — это любая строка формата, которая не является стандартной строкой числового формата.

В следующей таблице приведены описатели стандартного числового формата и примеры выходных данных, формируемых каждым описателем формата. Перейдите в раздел "Заметки " для получения дополнительных сведений об использовании строк пользовательского числового формата, а также в разделе "Пример " для комплексной иллюстрации их использования.

Спецификатор формата Имя Описание Примеры
"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
"\", "''", """" Escape-символы Вызывает интерпретацию следующего символа или символов как литерала, а не в качестве пользовательского описателя формата.

Дополнительные сведения: экранирование символов.
987654 ("\##00\#") -> #987654#

987654 ("#'#00'#'") -> #987654#

987654 (""#"#"#00""#"") -> #987654#
'string'

string
Разделитель строк-литералов Указывает на то, что заключенные в разделители символы должны быть скопированы в результирующую строку без изменений.

Дополнительные сведения см. в подразделе Символьные литералы.
68 ("# "градусы") -> 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" приводит к округлению значения до ближайшего значения цифры, предшествующей десятичной точке-разделителю, если назначено использование округления от нуля. Например, в результате форматирования числа 34,5 с помощью строки "00" будет получена строка со значением"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,," используется для форматирования числа 100 миллионов, то результатом является "100".

Разделитель групп и описатель масштабирования чисел можно использовать в строке формата одновременно. Например, если строка "#, 0,," и неизменяемый язык и региональные параметры используются для форматирования числа один миллиард, то результатом является "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

К таблице

Escape-символы

Символы "#", "0", ".", ",", "%" и "‰" в строке формата воспринимаются как описатели формата, а не как символы-литералы. В зависимости от их положения в строке настраиваемого формата верхний и нижний регистр "E", а также символы +и - также могут быть интерпретированы как описатели формата.

Чтобы предотвратить интерпретацию символа как описателя формата, можно:

  • Предшествуйте ему обратную косую черту.
  • Окружите его одним кавычками.
  • Окружите его двумя двойными кавычками.

Каждый из этих символов выступает в качестве escape-символов. Наличие escape-символа означает, что следующий за ним символ является литералом, который следует перенести в результирующую строку без изменений.

Чтобы включить в результирующую строку обратную косую черту, перед ней нужно поставить дополнительную обратную косую черту (\\).

Чтобы включить одну кавычку в результируемую строку, необходимо экранировать ее с помощью обратной косой черты (\'). Если другой одинарный кавычки, не экранируемый перед экранируемым одним кавычками, то обратная косая черта отображается вместо него ('\' отображается \).

Чтобы включить двойную кавычку в результируемую строку, необходимо экранировать два из них с обратной косой чертой (\"").

В следующем примере используются escape-символы, чтобы предотвратить интерпретацию символов "#", "0" и "" в виде символов escape-символов или описателей формата.

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

К таблице

Символьные литералы

Описатели формата, которые появляются в строке настраиваемых числовых форматов, всегда интерпретируются как символы формата и никогда не обрабатываются как литеральные символы. К ним относятся следующие символы:

  • 0
  • #
  • %
  • '
  • \
  • ""
  • .
  • ,
  • E или e, в зависимости от положения в строке формата.

Все остальные символы всегда интерпретируется как символьные литералы. В операции форматирования они включаются в результирующую строку без изменений. В операции анализа они должны точно соответствовать символам во входной строке. При сравнении учитывается регистр.

В следующем примере демонстрируется распространенный пример применения литеральных символов единиц измерения (в данном случае тысяч):

let
    Source = Number.ToText(123.8, "#,##0.0K")
    // Displays 123.8K
in
    Source

Указать необходимость интерпретации символов как литеральных, а не как символов формата, для их последующего включения в результирующую строку или успешного анализа во входной строке можно двумя способами:

  • Путем экранирования символа формата. Дополнительные сведения см. в описании escape-символов.

  • Путем заключения всей литеральной строки в апострофы.

В следующем примере применяются оба подхода, что позволяет включить зарезервированные символы в настраиваемую строку числового формата.

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

К таблице