Niestandardowe ciągi formatujące liczby
Można utworzyć ciąg niestandardowego formatu liczb, który składa się z jednego lub większej liczby niestandardowych specyfikatorów liczbowych, aby zdefiniować sposób formatowania danych liczbowych. Niestandardowy ciąg formatu liczbowego to dowolny ciąg formatu, który nie jest standardowym ciągiem formatu liczbowego.
W poniższej tabeli opisano niestandardowe specyfikatory formatu liczbowego i przedstawiono przykładowe dane wyjściowe generowane przez każdy specyfikator formatu. Przejdź do sekcji Uwagi, aby uzyskać dodatkowe informacje na temat używania niestandardowych ciągów formatu liczbowego, a sekcja Przykład zawiera kompleksową ilustrację ich użycia.
Specyfikator formatu | Nazwa/nazwisko | opis | Przykłady |
---|---|---|---|
„0” | Symbol zastępczy zero | Zamienia zero na odpowiednią cyfrę, jeżeli jest ona obecna. W przeciwnym wypadku zero występuje w ciągu wynikowym. Więcej informacji: Specyfikator niestandardowy "0". |
1234.5678 ("00000") -> 01235 0.45678 ("0.00", en-US) -> 0.46 0.45678 ("0.00", fr-FR) -> 0,46 |
"#" | Symbol zastępczy cyfry | Zamienia symbol „#” na odpowiednią cyfrę, jeżeli jest ona obecna. W przeciwnym wypadku żadna cyfra nie występuje w ciągu wynikowym. W ciągu wynikowym nie jest wyświetlana żadna cyfra, jeśli odpowiednia cyfra w ciągu wejściowym jest niepodpisanym znakiem 0. Na przykład 0003 ("####") —> 3. Więcej informacji: Specyfikator niestandardowy "#". |
1234.5678 ("#####") -> 1235 0.45678 ("#.#", en-US) —> .46 0.45678 ("#.#", fr-FR) -> ,46 |
"." | Punkt dziesiętny | Określa lokalizację separatora dziesiętnego w ciągu wynikowym. Więcej informacji: "." Specyfikator niestandardowy. |
0.45678 ("0.00", en-US) -> 0.46 0.45678 ("0.00", fr-FR) -> 0,46 |
"," | Separator grup i skalowania liczby | Jest używany zarówno jako separator grup, jak i specyfikator skalowania liczby. Jako separator grup wstawia zlokalizowany znak separatora grup między grupami. Jako specyfikator skalowania liczb dzieli liczbę przez 1000 dla każdej liczby z określonym przecinkiem. Więcej informacji: Specyfikator niestandardowy ",". |
Specyfikator separatora grup: 2147483647 ("#,#", en-US) —> 2,147,483,647 2147483647 ("#,#", es-ES) —> 2.147.483.647 Specyfikator skalowania: 2147483647 ("#,#,", en-US) —> 2147 2147483647 ("#,#,", es-ES) —> 2,147 |
"%" | Symbol zastępczy procentu | Mnoży liczbę przez 100 i wstawia zlokalizowany symbol procentu do ciągu wynikowego. Więcej informacji: Specyfikator niestandardowy "%". |
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 % |
"‰" | Symbol zastępczy promil | Mnoży liczbę przez 1000 i wstawia zlokalizowany symbol promila do ciągu wynikowego. Więcej informacji: Specyfikator niestandardowy "^". |
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” |
Notacja wykładnicza | Jeżeli występuje po nim przynajmniej jedno 0 (zero), formatuje wynik za pomocą notacji wykładniczej. Wielkość litery „E” lub „e” wskazuje wielkość symbolu wykładnika w ciągu wynikowym. Liczba zer po znaku „E” lub „e” określa minimalną liczbę cyfr wykładnika. Znak plus (+) wskazuje, że znak zawsze poprzedza wykładnik potęgi. Znak minus (-) wskazuje, że znak poprzedza tylko ujemny wykładnik potęgi. Więcej informacji: Specyfikatory niestandardowe "E" i "e". |
987654 ("#0.0e0") -> 98.8e4 1503.92311 ("0.0##e+00") -> 1.504e+03 1.8901385E-16 ("0.0e+00") -> 1.9e-16 |
"\", "''", """" | Znaki ucieczki | Powoduje, że następny znak lub znaki mają być interpretowane jako literał, a nie jako specyfikator formatu niestandardowego. Więcej informacji: Znaki ucieczki. |
987654 ("\###00\#") —> #987654# 987654 ("'#'#00'#'#'") —> #987654# 987654 (""#"#"#00""#""") —> #987654# |
"ciąg" "ciąg" |
Ogranicznik ciągu literału | Wskazuje, że znaki w cudzysłowie powinny zostać skopiowane do ciągu wynikowego bez zmian. Więcej informacji: Literały znaków. |
68 ("# 'stopnie'") -> 68 stopni 68 ("stopnie#") -> 68 stopni |
; | Separator sekcji | Definiuje sekcje z oddzielnymi ciągami formatu dla liczb dodatnich, ujemnych i dla zera. Więcej informacji: ";" Separator sekcji. |
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) |
Inne | Wszystkie inne znaki | Znak jest kopiowany do ciągu wynikowego bez zmian. Więcej informacji: Literały znaków. |
68 ("# °") -> 68 ° |
W poniższych sekcjach znajdują się szczegółowe informacje o poszczególnych niestandardowych specyfikatorach formatu liczb.
Specyfikator niestandardowy "0"
Niestandardowy specyfikator formatu „0” pełni rolę symbolu zastępczego zera. Jeżeli formatowana wartość zawiera cyfrę w miejscu, w którym w ciągu formatu występuje zero, ta cyfra jest kopiowana do ciągu wynikowego. W innym przypadku w ciągu wynikowym występuje zero. Położenie zera znajdującego się najdalej po lewej stronie od punktu dziesiętnego i położenie zera znajdującego się najdalej po prawej stronie od punktu dziesiętnego określa zakres cyfr, które są zawsze obecne w ciągu wynikowym.
Specyfikator „00” powoduje, że wartość zostaje zaokrąglona do najbliższej cyfry poprzedzającej miejsce dziesiętne, gdzie używane jest zawsze zaokrąglanie od zera. Na przykład wynikiem formatowania liczby 34,5 z pomocą specyfikatora „00” byłaby wartość 35.
W poniższym przykładzie pokazano kilka wartości formatowanych za pomocą ciągów formatu niestandardowego, które zawierają symbole zastępcze zera.
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
Uwaga
Pusta wartość tekstowa ("") w ostatnim parametrze Number.ToText w poprzednim przykładzie odnosi się do niezmiennej kultury.
Specyfikator niestandardowy "#"
Niestandardowy specyfikator formatu „#” służy jako symbol zastępczy cyfry. Jeżeli formatowana wartość zawiera cyfrę w miejscu, w którym w ciągu formatu znajduje się symbol „#”, ta cyfra jest kopiowana do ciągu wynikowego. W przeciwnym wypadku nic nie jest umieszczane w tym miejscu w ciągu wynikowym.
Należy pamiętać, że ten specyfikator nigdy nie wyświetla zera, który nie jest cyfrą znaczącą, nawet jeśli zero jest jedyną cyfrą w ciągu. Wyświetla zero tylko wtedy, gdy jest to znacząca cyfra w wyświetlanej liczbie.
Ciąg formatu „##” powoduje, że wartość zostaje zaokrąglona do najbliższej cyfry poprzedzającej miejsce dziesiętne, gdzie używane jest zawsze zaokrąglanie od zera. Na przykład wynikiem formatowania liczby 34,5 za pomocą specyfikatora „##” byłaby wartość 35.
W poniższym przykładzie pokazano kilka wartości formatowanych za pomocą ciągów formatu niestandardowego, które zawierają symbole zastępcze cyfr.
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
Aby zwrócić ciąg wynikowy, w którym nieobecne cyfry lub zera wiodące są zastępowane spacjami, użyj Text.PadStart i określ szerokość pola, jak pokazano w poniższym przykładzie.
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'
Specyfikator niestandardowy "."
Niestandardowy specyfikator formatu „.” wstawia zlokalizowany separator dziesiętny do ciągu wynikowego. Pierwszy kropka w ciągu formatu określa lokalizację separatora dziesiętnego w sformatowanej wartości. Wszelkie dodatkowe kropki są ignorowane. Jeśli specyfikator formatu kończy się znakiem "." tylko cyfry znaczące są formatowane w ciągu wynikowym.
Znak, który jest używany jako separator dziesiętny w ciągu wynikowym, nie zawsze jest kropką; jest określana przez kulturę, która kontroluje formatowanie.
W poniższym przykładzie użyto specyfikatora formatu „.” aby zdefiniować lokalizację punktu dziesiętnego w kilku ciągach wynikowych.
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
Specyfikator niestandardowy "",
Znak „,” jest używany zarówno jako separator grup, jak i specyfikator skalowania liczb.
Separator grup: jeśli jeden lub więcej przecinków jest określonych między dwoma symbolami zastępczymi cyfr (0 lub #), które formatują całkowite cyfry danej liczby, znak separatora grupy jest wstawiany między poszczególne grupy liczby w całkowitej części wyniku.
Kultura określa znak używany jako separator grupy liczb i rozmiar każdej grupy liczb. Na przykład jeśli ciąg „#,#” i niezmienna kultura są użyte do formatowania liczby 1000, wynikiem będzie „1 000”.
Specyfikator skalowania liczb: jeśli jeden lub większa liczba przecinków jest określonych natychmiast z lewej strony jawnego lub niejawnego punktu dziesiętnego, formatowana liczba jest dzielona przez 1000 dla każdego przecinka. Na przykład jeśli ciąg „0,,” jest używany do formatowania liczby 100 milionów, wynikiem jest „100”.
Specyfikatorów skalowania liczb i separatorów grup można użyć w tym samym ciągu formatu. Na przykład jeśli ciąg „#,0,,” i niezmienna kultura są używane do formatowania liczby jeden miliard, wynikiem jest „1 000”.
W poniższym przykładzie pokazano użycie przecinka jako separatora grup.
let
Source =
{
Number.ToText(1234567890, "#,#", ""),
// Displays 1,234,567,890
Number.ToText(1234567890, "#,##0,,", "")
// Displays, 1,235
}
in
Source
W poniższym przykładzie pokazano użycie przecinka jako specyfikatora skalowania liczb.
let
Source =
{
Number.ToText(1234567890, "#,,", ""),
// Displays 1235
Number.ToText(1234567890, "#,,,", ""),
// Displays 1
Number.ToText(1234567890, "#,##0,,", "")
// Displays 1,235
}
in
Source
Specyfikator niestandardowy "%"
Znak procentu (%) w ciągu formatu powoduje pomnożenie liczby przez 100 przed sformatowanym znakiem. Zlokalizowany symbol procentu jest wstawiany do liczby, w lokalizacji, na której znak % znajduje się w ciągu formatu. Używany znak procentu jest definiowany przez kulturę.
W poniższym przykładzie zdefiniowano ciąg formatu niestandardowego, który zawiera specyfikator niestandardowy "%".
let
Source = Number.ToText(.086, "#0.##%", "")
// Displays 8.6%
in
Source
Specyfikator niestandardowy "^"
Znak miliskowy (} lub \u2030) w ciągu formatu powoduje pomnożenie liczby przez 1000, zanim zostanie sformatowana. Odpowiedni symbol promila jest wstawiony w zwracanym ciągu w lokalizacji, w której symbol ‰ pojawia się w ciągu formatu. Używany znak milisowy jest definiowany przez kulturę, która zapewnia informacje o formatowaniu specyficznym dla kultury.
W poniższym przykładzie zdefiniowano ciąg formatu niestandardowego, który zawiera niestandardowy specyfikator „‰”.
let
Source = Number.ToText(.00354, "#0.##" & Character.FromNumber(0x2030), "")
// Displays 3.54‰
in
Source
Specyfikatory niestandardowe "E" i "e"
Jeśli którykolwiek z ciągów „E”, „E+”, „E-”, „e”, „e+” lub „e-” jest obecny w ciągu formatu i natychmiast po nim następuje co najmniej jedno zero, liczba jest formatowana przy użyciu notacji wykładniczej z symbolem „E” lub „e” wstawionym między liczbą a wykładnikiem potęgi. Liczba zer po wskaźniku notacji wykładniczej określa minimalną liczbę cyfr wykładnika potęgi. Formaty „E+” i „e+” wskazują, że znak plus lub znak minus powinien zawsze poprzedzać wykładnik potęgi. Formaty „E”, „E-”, „e” i „e-” wskazują, że znak powinien poprzedzać tylko ujemne wykładniki potęgi.
W poniższym przykładzie sformatowano kilka wartości liczbowych przy użyciu specyfikatorów notacji wykładniczej.
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
Znaki ucieczki
Symbole „#”, „0”, „.”, „,”, „%” i „‰” w ciągu formatu są interpretowane jako specyfikatory formatu, a nie jako znaki literału. W zależności od ich pozycji w ciągu formatu niestandardowego wielkie i małe litery "E", a także symbole + i - mogą być również interpretowane jako specyfikatory formatu.
Aby zapobiec interpretowaniu znaku jako specyfikatora formatu, możesz:
- Poprzedzić go ukośnikiem odwrotnym.
- Otaczaj go pojedynczym cudzysłowem.
- Otaczaj go dwoma podwójnymi cudzysłowymi.
Każdy z tych znaków działa jako znaki ucieczki. Znak ucieczki oznacza, że następnym znakiem jest znak literału, który należy bez zmian umieścić w ciągu wynikowym.
Aby uwzględnić ukośnik odwrotny w ciągu wynikowym, należy go usunąć za pomocą innego ukośnika odwrotnego (\\
).
Aby uwzględnić pojedynczy cudzysłów w ciągu wynikowym, należy go ująć w ukośnik odwrotny (\'
). Jeśli inny pojedynczy cudzysłów, który nie jest poprzedzony ucieczką pojedynczego cudzysłowu, zostanie wyświetlony ukośnik odwrotny ('\'
wyświetla \
).
Aby uwzględnić podwójny cudzysłów w ciągu wynikowym, należy użyć dwóch z nich z ukośnikiem odwrotnym (\""
).
W poniższym przykładzie użyto znaków ucieczki, aby uniemożliwić operacji formatowania interpretowanie znaków "#", "0" i "" jako znaków ucieczki lub specyfikatorów formatu.
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
Separator sekcji ";"
Średnik (;) jest warunkowym specyfikatorem formatu, który stosuje do liczby różne formatowania, w zależności od tego, czy wartość jest dodatnia, ujemna, czy równa zero. Aby utworzyć takie zachowanie, ciąg formatu niestandardowego może zawierać maksymalnie trzy sekcje rozdzielone średnikami. Te sekcje opisano w poniższej tabeli.
Liczba sekcji | opis |
---|---|
Jedna sekcja | Ciąg formatu jest stosowany do wszystkich wartości. |
Dwie sekcje | Pierwsza sekcja jest stosowana do wartości dodatnich i zer, a druga sekcja do wartości ujemnych. Jeżeli formatowana liczba jest ujemna, ale staje się zerem po zaokrągleniu zgodnym z formatem w drugiej sekcji, wynikowa wartość zero jest formatowana zgodnie z pierwszą sekcją. |
Trzy sekcje | Pierwsza sekcja jest stosowana do wartości dodatnich, druga sekcja jest stosowana do wartości ujemnych, a trzecia sekcja jest stosowana do zer. Druga sekcja może być pozostawiona pusta (nic nie znajduje się między średnikami); w takim przypadku pierwsza sekcja jest stosowana do wszystkich wartości niezerowych. Jeżeli formatowana liczba jest niezerowa, ale staje się zerem po zaokrągleniu zgodnym z formatem w pierwszej lub drugiej sekcji, wynikowa wartość zero jest formatowana zgodnie z trzecią sekcją. |
Separatory sekcji ignorują wszelkie istniejące wcześniej formatowanie skojarzone z liczbą podczas formatowania wartości końcowej. Na przykład wartości ujemne są zawsze wyświetlane bez znaku minus, gdy używane są separatory sekcji. Jeśli końcowa sformatowana wartość ma mieć znak minus, należy jawnie dołączyć znak minus jako część niestandardowego specyfikatora formatu.
W poniższym przykładzie użyto specyfikatora formatu „;”, aby inaczej formatować liczby dodatnie, ujemne i zera.
let
Source =
{
Number.ToText(1234, "##;(##)"),
// Displays 1234
Number.ToText(-1234, "##;(##)"),
// Displays (1234)
Number.ToText(0, "##;(##);**Zero**")
// Displays **Zero**
}
in
Source
Literały znaków
Specyfikatory formatu wyświetlane w niestandardowym ciągu formatu liczbowego są zawsze interpretowane jako znaki formatowania i nigdy jako znaki literału. Obejmuje to następujące znaki:
Wszystkie inne znaki są zawsze interpretowane jako literały znaków, a w operacji formatowania są uwzględniane w ciągu wynikowym bez zmian. W operacji analizowania muszą dokładnie odpowiadać znakom w ciągu wejściowym; w porównaniu uwzględniana jest wielkość liter.
Poniższy przykład ilustruje jedno typowe użycie jednostek znaków literału (w tym przypadku tysięcy):
let
Source = Number.ToText(123.8, "#,##0.0K")
// Displays 123.8K
in
Source
Istnieją dwa sposoby wskazywania, że znaki mają być interpretowane jako znaki literału, a nie jako znaki formatowania, aby można je było uwzględnić w ciągu wynikowym lub pomyślnie przeanalizować w ciągu wejściowym:
Przez ucieczkę znaku formatowania. Aby uzyskać więcej informacji, przejdź do pozycji Znaki ucieczki.
Otaczając cały ciąg literału w cudzysłowie apostrofy.
W poniższym przykładzie użyto obu metod do uwzględnienia zastrzeżonych znaków w niestandardowym ciągu formatu liczbowego.
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
Uwagi
Liczby zmiennoprzecinkowe i naN
Niezależnie od ciągu formatu, jeśli wartość Decimal.Type
, Single.Type
lub Double.Type
typ zmiennoprzecinkowy jest dodatnią nieskończonością, nieskończonością ujemną, a nie liczbą (NaN), sformatowany ciąg jest wartością odpowiednich Number.PositiveInfinity, Number.NegativeInfinitylub Number.NaN stałych określonych przez obecnie odpowiednią kulturę.
Ciągi formatu zaokrąglania i stałego punktu
W przypadku ciągów formatu o stałym punkcie (czyli ciągów formatu, które nie zawierają znaków formatu notacji naukowej), liczby są zaokrąglane do tylu miejsc dziesiętnych, ponieważ po prawej stronie przecinka dziesiętnego znajdują się symbole zastępcze cyfr. Jeśli ciąg formatu nie zawiera punktu dziesiętnego, liczba jest zaokrąglona do najbliższej liczby całkowitej. Jeśli liczba ma więcej cyfr niż jest symboli zastępczych cyfr po lewej stronie punktu dziesiętnego, to dodatkowe cyfry są kopiowane do ciągu wynikowego bezpośrednio przed pierwszym symbolem zastępczym cyfry.
Przykład
W poniższym przykładzie pokazano dwa ciągi niestandardowego formatu liczb. W obu przypadkach symbol zastępczy cyfry (#
) wyświetla dane liczbowe, a wszystkie inne znaki są kopiowane do ciągu wynikowego.
let
Source =
{
Number.ToText(1234567890, "(###) ###-####"),
// Displays (123) 456-7890
Number.ToText(42, "My Number = #")
// Displays My number = 42
}
in
Source