簡単な説明
この記事では、PowerShell での数値の構文と使用方法について説明します。
長い説明
数値リテラルには、整数と実数の 2 種類があります。 どちらも型サフィックスと乗数サフィックスを持つことができます。
整数リテラル
整数リテラルは、10 進表記または 16 進表記で記述できます。 16 進数リテラルには、10 進数と区別するために、 0x が付いています。
整数リテラルには、型サフィックスと乗数サフィックスを指定できます。
| 敬称 | 意味 |
|---|---|
l |
long データ型 |
kb |
kibibyte (10241) 乗数 |
mb |
mebibyte (10242) 乗数 |
gb |
gigibyte (10243) 乗数 |
tb |
teribyte (10244) 乗数 |
pb |
ペチバイト (10245) 乗数 |
整数リテラルの型は、その値、型サフィックス、および数値乗数サフィックスによって決まります。
型サフィックスのない整数リテラルの場合:
- 値を
[int]型で表すことができる場合、その型です。 - それ以外の場合、
[long]型で値を表すことができる場合は、その型になります。 - それ以外の場合、
[decimal]型で値を表すことができる場合は、その型になります。 - それ以外の場合は、
[double]型で表されます。
型サフィックスを持つ整数リテラルの場合:
- 型サフィックスが
uで、値を型[int]表すことができる場合、その型は[int]。 - 型サフィックスが
uで、値を型[long]表すことができる場合、その型は[long]。 - その値を指定された型で表すことができる場合は、その型です。
- それ以外の場合、そのリテラルの形式が正しくありません。
実際のリテラル
実際のリテラルは、10 進表記でのみ書き込むことができます。 この表記には、小数点に続く小数部と指数部を使用した指数表記を含めることができます。
指数部には、'e' の後に省略可能な符号 (+/-) と指数を表す数値が含まれます。 たとえば、リテラル値 1e2 数値 100 と等しくなります。
実際のリテラルには、型サフィックスと乗数サフィックスを指定できます。
| 敬称 | 意味 |
|---|---|
d |
Decimal データ型 |
kb |
kibibyte (10241) 乗数 |
mb |
mebibyte (10242) 乗数 |
gb |
gigibyte (10243) 乗数 |
tb |
teribyte (10244) 乗数 |
pb |
ペチバイト (10245) 乗数 |
実数リテラルには、double と decimal の 2 種類があります。 これらは、それぞれ 10 進型サフィックスの存在または存在によって示されます。 PowerShell では、 [float] 値のリテラル表現はサポートされていません。 double 実数リテラルには型 [double]があります。 10 進実リテラルの型は [decimal]。
decimal 実数リテラルの小数部の末尾の 0 は有意です。
[double]実数リテラル内の指数部の数字の値が、サポートされている最小値より小さい場合、その[double]実数リテラルの値は 0 になります。
[decimal]実数リテラル内の指数部の数字の値が、サポートされている最小値より小さい場合、そのリテラルの形式が正しくありません。
[double]または実数リテラルの指数部の数字の値[decimal]サポートされている最大値より大きい場合、そのリテラルの形式が正しくありません。
Note
この構文では、double 実数リテラルに長い型のサフィックスを付けることができます。
PowerShell では、このケースは、 [long]型で表される値を持つ整数リテラルとして扱います。 この機能は、以前のバージョンの PowerShell との下位互換性のために残されています。 ただし、プログラマはこの形式の整数リテラルを使用しないことをお勧めします。これは、リテラルの実際の値を簡単に隠すことができるためです。 たとえば、値が 1 の 1.2L 、 1.2345e1L に値 12、 1.2345e-5L に値 0 があり、いずれもすぐには明らかではありません。
数値乗数
便宜上、整数リテラルと実数リテラルには数値乗数を含めることができます。これは、一般的に使用される 2 のべき乗のセットの 1 つを示します。 数値乗数は、大文字と小文字の任意の組み合わせで記述できます。
乗数サフィックスは、 u、 ul、および l 型サフィックスと組み合わせて使用できます。
乗数の例
PS> 1kb
1024
PS> 1.30Dmb
1363148.80
PS> 0x10Gb
17179869184
PS> 1.4e23tb
1.5393162788864E+35
PS> 0x12Lpb
20266198323167232
数値型アクセラレータ
PowerShell では、次の型アクセラレータがサポートされています。
| アクセラレータ | Note | 説明 |
|---|---|---|
[byte] |
Byte (unsigned) | |
[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 ビット浮動小数点 |
他の数値型の操作
他の数値型を操作するには、型アクセラレータを使用する必要があります。これは、何らかの問題はありません。 たとえば、高整数値は常に double として解析されてから、他の型にキャストされます。
PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904
値は最初に倍精度として解析され、より高い範囲では精度が失われます。 この問題を回避するには、値を文字列として入力し、変換します。
PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111
例示
次の表に、数値リテラルの例をいくつか示し、その型と値を示します。
| 番号 | タイプ | Value |
|---|---|---|
| 100 | Int32 | 100 |
| 100D | 10 進法 | 100 |
| 100l | Int64 | 100 |
| 1e2 | 倍精度浮動小数点型 | 100 |
| 1.e2 | 倍精度浮動小数点型 | 100 |
| 0x1e2 | Int32 | 482 |
| 0x1e2L | Int64 | 482 |
| 0x1e2D | Int32 | 7725 |
| 482D | 10 進法 | 482 |
| 482gb | Int64 | 517543559168 |
| 0x1e2lgb | Int64 | 517543559168 |
数値型の変換
文字列を数値に変換する場合は、追加の 16 進形式インジケーターがサポートされます。 これらの追加の形式はリテラルとして認識されません。
[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
最初の 2 つの例は、数値リテラルの終了位置と GetType メソッドの開始位置を PowerShell パーサーが判断できるため、リテラル値をかっこで囲まなくても機能します。
PowerShell