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


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

Строки стандартных числовых форматов служат для форматирования стандартных числовых типов. Строка стандартных числовых форматов использует формат [format specifier][precision specifier], где:

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

  • Описатель точности является необязательным целым числом, влияющим на число цифр в результирующей строке. Описатель точности управляет числом цифр в строковом представлении числа.

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

    Примечание.

    Описатель точности определяет число цифр в результирующей строке. Чтобы провести строку результатов с начальными или конечными пробелами или другими символами (например, 0), используйте функции Text.PadStart и Text.PadEnd и используйте общую длину count в этих функциях для заполнения строки результатов.

Строки стандартного числового формата поддерживаются функцией Number.ToText.

Описатели формата "Стандартный"

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

Примечание.

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

Спецификатор формата Имя Описание Примеры
"C" или "c" Валюта Результат: значение валюты.

Поддерживается: для всех числовых типов данных.

Описатель точности: количество цифр дробной части.

Описатель точности по умолчанию: определяется языком и региональными параметрами.

Дополнительные сведения см. в подразделе Описатель формата валюты (C).
123.456 ("C", en-US)
-> \$123.46

123.456 ("C", fr-FR)
-> 123,46 €

123.456 ("C", ja-JP)
-> 123

-123.456 ("C3", en-US)
-> (\$123.456)

-123.456 ("C3", fr-FR)
-> -123,456 €

-123.456 ("C3", ja-JP)
-> --123.456
"D" или "d" Десятичное число Результат: целочисленные цифры с необязательным отрицательным знаком.

Поддерживается: только целочисленными типами данных.

Описатель точности: минимальное число цифр.

Описатель точности по умолчанию: минимальное необходимое число цифр.

Дополнительные сведения см. в подразделе Описатель десятичного формата (D).
1234 ("D")
-> 1234

-1234 ("D6")
- -> 001234
"E" или "e" Экспоненциальный (научный) Результат: экспоненциальная нотация.

Поддерживается: для всех числовых типов данных.

Описатель точности: количество цифр дробной части.

Описатель точности по умолчанию: 6.

Дополнительные сведения см. в подразделе Описатель экспоненциального формата (E).
1052.0329112756 ("E", en-US)
-> 1.052033E+003

1052.0329112756 ("e", fr-FR)
-> 105203e+003

-1052.0329112756 ("e2", en-US)
-> -1.05e+003

-1052.0329112756 ("E2", fr-FR)
-> -105E+003
"F" или "f" С фиксированной запятой Результат: цифры целой и дробной частей с необязательным отрицательным знаком.

Поддерживается: для всех числовых типов данных.

Описатель точности: количество цифр дробной части.

Описатель точности по умолчанию: определяется языком и региональными параметрами.

Дополнительные сведения см. в подразделе Описатель формата с фиксированной запятой (F).
1234.567 ("F", en-US)
-> 1234.57

1234.567 ("F", de-DE)
-> 1234 57

1234 ("F1", en-US)
-> 1234.0

1234 ("F1", de-DE)
-> 1234,0

-1234.56 ("F4", en-US)
-> -1234.5600

-1234.56 ("F4", de-DE)
-> -1234,5600
"G" или "g" Общие Результат: наиболее компактная запись из двух вариантов — экспоненциального и с фиксированной запятой.

Поддерживается: для всех числовых типов данных.

Описатель точности: количество значащих цифр.

Описатель точности по умолчанию: определяется численным типом.

Дополнительные сведения см. в подразделе Описатель общего формата (G).
-123.456 ("G", en-US)
-> -123.456

-123.456 ("G", sv-SE)
-> -123 456

123.4546 ("G4", en-US)
-> 123.5

123.4546 ("G4", sv-SE)
-> 123,5

-1.234567890e-25 ("G", en-US)
-> -1.23456789E-25

-1.234567890e-25 ("G", sv-SE)
-> -1,23456789E-25
"N" или "n" Число Результат: цифры целой и дробной частей, разделители групп и разделитель целой и дробной частей с необязательным отрицательным знаком.

Поддерживается: для всех числовых типов данных.

Описатель точности: желаемое число знаков дробной части.

Описатель точности по умолчанию: определяется языком и региональными параметрами.

Дополнительные сведения см. в подразделе Описатель числового формата (N).
1234.567 ("N", en-US)
-> 1,234.57

1234.567 ("N", ru-RU)
-> 1 234 57

1234 ("N1", en-US)
-> 1,234.0

1234 ("N1", ru-RU)
-> 1 234 0

-1234.56 ("N3", en-US)
-> -1,234.560

-1234.56 ("N3", ru-RU)
-> -1 234 560
"P" или "p" Процент Результат: число, умноженное на 100 и отображаемое с символом процента.

Поддерживается: для всех числовых типов данных.

Описатель точности: желаемое число знаков дробной части.

Описатель точности по умолчанию: определяется языком и региональными параметрами.

Дополнительные сведения см. в подразделе Описатель формата процента (P).
1 ("P", en-US)
-> 100,00 %

1 ("P", fr-FR)
-> 100 00 %

-0.39678 ("P1", en-US)
-> -39,7 %

-0.39678 ("P1", fr-FR)
-> -39,7 %
"X" или "x" Шестнадцатеричное Результат: шестнадцатеричная строка.

Поддерживается: только целочисленными типами данных.

Описатель точности: число цифр в результирующей строке.

Дополнительные сведения: Описатель шестнадцатеричного формата ("X") .
255 ("X")
-> FF

-1 ("x")
-> ff

255 ("x4")
-> 00ff

-1 ("X4")
-> 00FF
Любой другой символ Неизвестный описатель Результат. Вызывает ошибку выражения во время выполнения.

Использование стандартных числовых строк форматирования

Стандартная строка числового формата может использоваться для определения форматирования числового значения. Его можно передать в параметр Number.ToTextformat. В следующем примере осуществляется форматирование числового значения в качестве строки со значением валюты для текущего языка и региональных параметров (en-US).

Number.ToText(123.456, "C2")
// Displays $123.46

При необходимости можно указать аргумент count в функциях Text.PadStart и Text.PadEnd, чтобы указать ширину числового поля и выровнять его значение по правому или левому краю. Например, следующий пример слева выравнивает значение валюты в 28-символьном поле и выравнивает значение валюты в 14-символьном поле (при использовании монопространствированного шрифта).

let
    amounts = {16305.32, 18794.16},
    result = Text.Format("    Beginning Balance           Ending Balance#(cr,lf)    #{0}#{1}",
    {
        Text.PadEnd(Number.ToText(amounts{0}, "C2"), 28), 
        Text.PadStart(Number.ToText(amounts{1}, "C2"), 14)
    })
in
    result

// Displays:
//    Beginning Balance           Ending Balance
//    $16,305.32                      $18,794.16

В приведенных ниже разделах содержится подробная информация о всех строках стандартных числовых форматов.

Описатель формата валюты (C)

При использовании описателя формата валюты ("C") число преобразуется в строку, представляющую сумму в некоторой валюте. Желаемое количество знаков дробной части в результирующей строке задается описателем точности. Если описатель точности опущен, число десятичных разрядов по умолчанию для использования в значениях валют равно 2.

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

Строка результата зависит от сведений о форматировании текущего языка и региональных параметров.

В следующем примере значение форматируется с помощью описателя денежного формата:

let
    Source = 
    {
        Number.ToText(12345.6789, "C"),
        Number.ToText(12345.6789, "C3"),
        Number.ToText(12345.6789, "C3", "da-DK")
    }
in
    Source 

// The example displays the following list on a system whose
// current culture is English (United States):
//       $12,345.68
//       $12,345.679
//       12.345,679 kr.

Описатель десятичного формата (D)

При использовании описателя десятичного формата ("D") число преобразуется в строку, состоящую из десятичных цифр (0–9); если число отрицательное, перед ним ставится отрицательный знак. Этот формат доступен только для целых типов.

Минимальное количество знаков в выходной строке задается спецификатором точности. Недостающие знаки в строке заменяются нулями. Если описатель точности не задан, по умолчанию используется минимальное значение, позволяющее представить целое число без нулей в начале.

Строка результата зависит от сведений о форматировании текущего языка и региональных параметров.

В следующем примере значение форматируется с помощью описателя десятичного формата.

let
    Source = 
    { 
        Number.ToText(12345, "D"),
        // Displays 12345

        Number.ToText(12345, "D8"),
        // Displays 00012345

        Number.ToText(-12345, "D"),
        // Displays -12345

        Number.ToText(-12345, "D8")
        // Displays -00012345
    }
in
    Source 

Описатель экспоненциального формата (E)

При использовании описателя экспоненциального формата ("E") число преобразуется в строку вида "-d.ddd…E+ddd" или "-d.ddd…e+ddd", где каждый символ "d" обозначает цифру (0–9). Если число отрицательное, в начале строки ставится отрицательный знак. Перед разделителем целой и дробной части всегда стоит ровно одна цифра.

Требуемое число знаков дробной части задается спецификатором точности. Если спецификатор точности отсутствует, по умолчанию число знаков дробной части равно шести.

Регистр описателя формата задает регистр буквы, стоящей перед экспонентой ("E" или "e"). Экспонента состоит из знака "плюс" или "минус" и трех цифр. Недостающие до минимума цифры заменяются нулями, если это необходимо.

Строка результата зависит от сведений о форматировании текущего языка и региональных параметров.

В следующем примере значение форматируется с помощью описателя экспоненциального формата.

let
    Source = 
    { 
        Number.ToText(12345.6789, "E", ""),
        // Displays 1.234568E+004

        Number.ToText(12345.6789, "E10", ""),
        // Displays 1.2345678900E+004

        Number.ToText(12345.6789, "e4", ""),
        // 1.2346e+004

        Number.ToText(12345.6789, "E", "fr-FR")
        // Displays 1,234568E+004
    }
in
    Source 

Примечание.

Пустое текстовое значение ("") в последнем параметре Number.ToText в предыдущем примере ссылается на инвариантный язык и региональные параметры.

Описатель формата фиксированной точки (F)

При использовании описателя формата с фиксированной запятой ("F") число преобразуется в строку вида "-ddd.ddd…", где каждый символ "d" обозначает цифру (0–9). Если число отрицательное, в начале строки ставится отрицательный знак.

Требуемое число знаков дробной части задается спецификатором точности. Если описатель точности опущен, число десятичных знаков по умолчанию для использования в числовых значениях равно 2.

Строка результата зависит от сведений о форматировании текущего языка и региональных параметров.

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

let
    Source =
    {
        Number.ToText(17843, "F", ""),
        // Displays 17843.00

        Number.ToText(-29541, "F3", ""),
        // Displays -29541.000

        Number.ToText(18934.1879, "F", ""),
        // Displays 18934.19

        Number.ToText(18934.1879, "F0", ""),
        // Displays 18934

        Number.ToText(-1898300.1987, "F1", ""),
        // Displays -1898300.2

        Number.ToText(-1898300.1987, "F3", "es-ES")
        // Displays -1898300,199
    }
in
    Source

Описатель общего формата (G)

При использовании описателя общего формата ("G") число преобразуется в более короткий из двух вариантов: запись с фиксированной запятой или экспоненциальная запись. При этом учитывается тип числа и наличие описателя точности. Описатель точности определяет максимальное количество значащих цифр, которые могут быть использованы в результирующей строке. Если описатель точности не задан или равен нулю, точность определяется типом числа, как показано в следующей таблице.

Числовой тип Точность по умолчанию
Byte.Type или Int8.Type 3 знака
Int16.Type 5 знака
Int32.Type 10 знака
Int64.Type 19 знака
Single.Type 9 цифр
Double.Type 17 цифр
Decimal.Type 15 знаков

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

Тем не менее, если число относится к типу Decimal.Type и описатель точности не задан, всегда используется нотация с фиксированной запятой, а нули в конце не отбрасываются.

Если используется экспоненциальная нотация, регистр буквы, стоящей перед экспонентой, определяется регистром описателя формата (буква "E" соответствует "G", "e" соответствует "g"). Экспонента содержит не менее двух цифр. Это отличает данный формат от экспоненциальной записи, создаваемой при использовании описателя экспоненциального формата, поскольку в последнем случае экспонента содержит не менее трех цифр.

Строка результата зависит от сведений о форматировании текущего языка и региональных параметров.

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

let
    Source =
    {
        Number.ToText(12345.6789, "G", ""),
        // Displays 12345.6789

        Number.ToText(12345.6789, "G", "fr-FR"),
        // Displays 12345,6789

        Number.ToText(12345.6789, "G7", ""),
        // Displays 12345.68

        Number.ToText(.0000023, "G", ""),
        // Displays 2.3E-06

        Number.ToText(.0000023, "G", "fr-FR"),
        // Displays 2,3E-06

        Number.ToText(.0023, "G", ""),
        // Displays 0.0023

        Number.ToText(1234, "G2", ""),
        // Displays 1.2E+03

        Number.ToText(Number.PI, "G5", "")
        // Displays 3.1416
    }
in
    Source

Описатель числовых форматов (N)

Спецификатор числового формата ("N") преобразует число в стоку вида "-d,ddd,ddd.ddd… ", где знак "-" при необходимости представляет знак отрицательного числа, знак "d" означает цифру (0-9), знак "," — разделитель групп, а знак "." —- разделитель целой и дробной части. Требуемое число знаков дробной части задается спецификатором точности. Если описатель точности опущен, число десятичных разрядов определяется текущим языком и региональными параметрами.

Строка результата зависит от сведений о форматировании текущего языка и региональных параметров.

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

let
    Source =
    {
        Number.ToText(-12445.6789, "N", ""),
        // Displays -12,445.68

        Number.ToText(-12445.6789, "N1", "sv-SE"),
        // Displays -12 445,7

        Number.ToText(123456789, "N1", "")
        // Displays 123,456,789.0
    }
in
    Source

Описатель формата процента (P)

При использовании описателя формата процента ("P") число умножается на 100 и преобразуется в строку, представляющую процентную долю. Требуемое число знаков дробной части задается спецификатором точности. Если описатель точности опущен, используется числовая точность по умолчанию, предоставляемая текущим языком и региональными параметрами.

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

let
    Source =
    {
        Number.ToText(.2468013, "P", ""),
        // Displays 24.68 %

        Number.ToText(.2468013, "P", "hr-HR"),
        // Displays 24,68 %

        Number.ToText(.2468013, "P1", "en-US")
        // Displays 24.7%
    }
in
    Source

Описатель шестнадцатеричного формата (X)

При использовании описателя шестнадцатеричного формата ("X") число преобразуется в строку шестнадцатеричных цифр. Регистр шестнадцатеричных цифр больше 9 совпадает с регистром описателя формата. Например, чтобы получить запись "ABCDEF", задайте описатель X" или, наоборот, задайте описатель "x", чтобы получить "abcdef". Этот формат доступен только для целых типов.

Минимальное количество знаков в выходной строке задается спецификатором точности. Недостающие знаки в строке заменяются нулями.

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

В следующем примере значения форматируются с помощью спецификатора шестнадцатеричного формата.

let
    Source =
    {
        Number.ToText(0x2045e, "x"),
        // Displays 2045e

        Number.ToText(0x2045e, "X"),
        // Displays 2045E

        Number.ToText(0x2045e, "X8"),
        // Displays 0002045E

        Number.ToText(123456789, "X"),
        // Displays 75BCD15

        Number.ToText(123456789, "X2")
        // Displays 75BCD15
    }
in
    Source

Примечания.

В этом разделе содержатся дополнительные сведения об использовании стандартных строк числовых форматов.

Целочисленные типы и типы с плавающей запятой

Некоторые описания спецификаторов стандартных числовых форматов относятся к целочисленным типам и типам с плавающей запятой. Целочисленные числовые типы: Byte.Type, Int8.Type, Int16.TypeиInt32.TypeInt64.Type. Числовыми типами с плавающей запятой являются Decimal.Type, Single.Type и Double.Type.

Бесконечности действительных чисел с плавающей запятой и NaN

Независимо от строки формата, если значение Decimal.Type, Single.Type или Double.Type типа с плавающей запятой является положительным бесконечностью, отрицательным бесконечностью или не числом (NaN), форматированная строка является значением соответствующих Number.PositiveInfinity, Number.NegativeInfinityили Number.NaN констант, заданных текущим языком и региональными параметрами.

Пример кода

В следующем примере форматируется плавающая точка и целочисленное числовое значение с помощью языка и региональных параметров en-US и всех стандартных числовых описателей. В этом примере используются два конкретных числовых типа (Double.Typeи), но будут давать аналогичные результаты для любого из других числовых базовых типов (Int32.Type, , Byte.Type, Decimal.TypeInt8.TypeInt16.Typeи ).Int64.TypeSingle.Type

let
    // Display text representations of numbers for en-US culture
    culture = "en-US",

    // Output floating point values
    floating = Double.From(10761.937554),
    #"Floating results" = 
    {
        Text.Format("C: #{0}", {Number.ToText(floating, "C", culture)}),         // Displays "C: $10,761.94"
        Text.Format("E: #{0}", {Number.ToText(floating, "E03", culture)}),       // Displays "E: 1.076E+004"
        Text.Format("F: #{0}", {Number.ToText(floating, "F04", culture)}),       // Displays "F: 10761.9376"
        Text.Format("G: #{0}", {Number.ToText(floating, "G", culture)}),         // Displays "G: 10761.937554"
        Text.Format("N: #{0}", {Number.ToText(floating, "N03", culture)}),       // Displays "N: 10,761.938"
        Text.Format("P: #{0}", {Number.ToText(floating/10000, "P02", culture)})  // Displays "P: 107.62%"
    },
    
    // Output integral values
    integral = Int32.From(8395),
    #"Integral results" =
    {
        Text.Format("C: #{0}", {Number.ToText(integral, "C", culture)}),         // Displays "C: $8,395.00"
        Text.Format("D: #{0}", {Number.ToText(integral, "D6", culture)}),        // Displays "D: 008395"
        Text.Format("E: #{0}", {Number.ToText(integral, "E03", culture)}),       // Displays "E: 8.395E+003"
        Text.Format("F: #{0}", {Number.ToText(integral, "F01", culture)}),       // Displays "F: 8395.0"
        Text.Format("G: #{0}", {Number.ToText(integral, "G", culture)}),         // Displays "G: 8395"
        Text.Format("N: #{0}", {Number.ToText(integral, "N01", culture)}),       // Displays "N: 8,395.0"
        Text.Format("P: #{0}", {Number.ToText(integral/10000, "P02", culture)}), // Displays "P: 83.95%"
        Text.Format("X: 0x#{0}", {Number.ToText(integral, "X", culture)})        // Displays "X: 0x20CB"
    },
    results = #"Floating results" & #"Integral results"

in
    results