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


Сведения о числовых литералах

Краткое описание

В этой статье описывается синтаксис и использование числовых значений в 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. Числовое умножение может быть записано в любом сочетании верхних или строчных букв.

Суффиксы умножения можно использовать в сочетании с uulсуффиксами и 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 .