Сведения о числовых литералах
Краткое описание
В этой статье описывается синтаксис и использование числовых значений в PowerShell.
Подробное описание
Существует два типа числовых литералы: целочисленные и реальные. Оба могут иметь суффиксы типа и умножения.
Целочисленные литералы
Целые литералы могут быть записаны в десятичном или шестнадцатеричном нотации. Шестнадцатеричные литералы префиксируются, 0x
чтобы отличить их от десятичных чисел.
Целые литералы могут иметь суффикс типа и суффикс умножения.
Суффикс | Значение |
---|---|
l |
длинный тип данных |
kb |
умножение килобайта |
mb |
Умножение мегабайта |
gb |
умножение гигабайт |
tb |
умножение терабайтов |
Pb |
мультипликатор petabyte |
Тип целочисленного литерала определяется его значением, суффиксом типа и числовым суффиксом умножения.
Для целочисленного литерала без суффикса типа:
- Если значение может быть представлено по типу
[int]
, то это его тип. - В противном случае, если значение может быть представлено по типу
[long]
, то есть его тип. - В противном случае, если значение может быть представлено по типу
[decimal]
, то есть его тип. - В противном случае он представлен типом
[double]
.
Для целочисленного литерала с суффиксом типа:
- Если суффикс типа и
u
значение может быть представлено по типу[int]
, то его тип равен[int]
. - Если суффикс типа и
u
значение может быть представлено по типу[long]
, то его тип равен[long]
. - Если его значение может быть представлено типом, указанным, то это его тип.
- В противном случае этот литерал неправильно сформирован.
Вещественные литералы
Реальные литералы могут быть записаны только в десятичной нотации. Эта нотация может включать дробные значения после десятичной запятой и научной нотации с помощью экспоненциальной части.
Экспоненциальная часть включает "e", за которым следует необязательный знак (+/-) и число, представляющее экспонент. Например, литеральное значение 1e2
равно числовое значение 100.
Реальные литералы могут иметь суффикс типа и суффикс умножения.
Суффикс | Значение |
---|---|
d |
тип данных decimal |
kb |
умножение килобайта |
mb |
Умножение мегабайта |
gb |
умножение гигабайт |
tb |
умножение терабайтов |
pb |
мультипликатор petabyte |
Существует два вида вещественных литералов: double и decimal. Они указываются отсутствием или присутствием соответственно десятичного суффикса типа. PowerShell не поддерживает литеральное представление [float]
значения. Двойной реальный литерал имеет тип [double]
. Десятичный реальный литерал имеет тип [decimal]
.
В дробной части вещественного десятичного литерала учитываются нули в конце.
Если значение цифр экспонент-части в [double]
реальном литерале меньше минимально поддерживаемого, значение этого [double]
реального литерала равно 0. Если значение цифр экспонент-части в [decimal]
реальном литерале меньше минимально поддерживаемого, то этот литерал неправильно сформирован. Если значение цифр экспонент-части в [double]
или [decimal]
реальном литерале больше максимального поддерживаемого значения, то этот литерал неправильно сформирован.
Примечание.
Синтаксис позволяет двойному реальному литералу иметь суффикс длинного типа.
PowerShell рассматривает этот случай как целочисленный литерал, значение которого представлено типом [long]
. Эта функция была сохранена для обеспечения обратной совместимости с более ранними версиями PowerShell. Однако программистам не рекомендуется использовать целочисленные литералы в этой форме, так как они могут легко скрывать фактическое значение литерала. Например, 1.2L
имеет значение 1, 1.2345e1L
имеет значение 12 и 1.2345e-5L
имеет значение 0, ни одно из которых немедленно не очевидно.
Числовые умножения
Для удобства целые и реальные литералы могут содержать числовое умножение, указывающее один из наборов часто используемых полномочий 2. Числовое умножение может быть записано в любом сочетании верхних или строчных букв.
Суффиксы умножения можно использовать в сочетании с u
ul
суффиксами и l
суффиксами типа.
Примеры умножения
PS> 1kb
1024
PS> 1.30Dmb
1363148.80
PS> 0x10Gb
17179869184
PS> 1.4e23tb
1.5393162788864E+35
PS> 0x12Lpb
20266198323167232
Акселераторы числовых типов
PowerShell поддерживает следующие акселераторы типов:
Accelerator | Примечание. | Description |
---|---|---|
[byte] |
Байт (без знака) | |
[sbyte] |
Байт (подписанный) | |
[Int16] |
16-разрядное целое число | |
[UInt16] |
16-разрядное целое число (без знака) | |
[Int32] |
32-разрядное целое число | |
[int] |
Псевдоним для [int32] |
32-разрядное целое число |
[UInt32] |
32-разрядное целое число (без знака) | |
[Int64] |
64-разрядное целое число | |
[long] |
Псевдоним для [int64] |
64-разрядное целое число |
[UInt64] |
64-разрядное целое число (без знака) | |
[bigint] |
См . структуру BigInteger | |
[single] |
С плавающей запятой с одной точностью | |
[float] |
Псевдоним для [single] |
С плавающей запятой с одной точностью |
[double] |
Двойная точность с плавающей запятой | |
[decimal] |
128-разрядная плавающая точка |
Работа с другими числовыми типами
Для работы с любыми другими числовыми типами необходимо использовать акселераторы типов, которые не без некоторых проблем. Например, высокие целые значения всегда анализируются как двойные перед приведением к любому другому типу.
PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904
Значение анализируется как двойное первое, теряя точность в более высоких диапазонах. Чтобы избежать этой проблемы, введите значения в виде строк, а затем преобразуйте их:
PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111
Примеры
В следующей таблице содержится несколько примеров числовых литерала и перечислены их тип и значение:
Число | Тип | значение |
---|---|---|
100 | Int32 | 100 |
100D | Десятичное число | 100 |
100l | Int64 | 100 |
1e2 | Двойной | 100 |
1.e2 | Двойной | 100 |
0x1e2 | Int32 | 482 |
0x1e2L | Int64 | 482 |
0x1e2D | Int32 | 7725 |
482D | Десятичное число | 482 |
482gb | Int64 | 517543559168 |
0x1e2lgb | Int64 | 517543559168 |
Преобразование числовых типов
При преобразовании строк в числа поддерживаются дополнительные шестнадцатеричные индикаторы формата. Эти дополнительные форматы не распознаются как литералы.
[int] '0xF' -eq 0xF
[int] '&hF' -eq 0xF
[int] '#F' -eq 0xF
Команды, которые выглядят как числовые литералы
Любая команда, которая выглядит как числовый литерал, должна выполняться с помощью оператора вызова (&
), в противном случае она интерпретируется как число связанного типа.
Доступ к свойствам и методам числовых объектов
Чтобы получить доступ к члену числового литерала, существуют случаи, когда необходимо заключить литерал в скобки.
- Литерал не имеет десятичной запятой
- Литерал не имеет цифр после десятичной запятой
- Литерал не имеет суффикса
Например, следующий пример завершается ошибкой:
PS> 2.GetType().Name
At line:1 char:11
+ 2.GetType().Name
+ ~
An expression was expected after '('.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : ExpectedExpression
Ниже приведены примеры.
PS> 2L.GetType().Name
Int64
PS> 1.234.GetType().Name
Double
PS> (2).GetType().Name
Int32
Первые два примера работают без заключения литерального значения в круглые скобки, так как средство синтаксического анализа PowerShell может определить, где заканчивается числовый литерал и начинается метод GetType .
PowerShell
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по