다음을 통해 공유


about_Numeric_Literals

간단한 설명

이 문서에서는 PowerShell에서 숫자 값의 구문 및 사용에 대해 설명합니다.

긴 설명

숫자 리터럴에는 정수와 실수의 두 종류가 있습니다. 둘 다 형식 및 승수 접미사를 가질 수 있습니다.

정수 리터럴

정수 리터럴은 10진수 또는 16진수 표기법으로 작성할 수 있습니다. 16진수 리터럴은 10진수와 0x 구분하기 위해 접두사로 지정됩니다.

정수 리터럴에는 형식 접미사와 승수 접미사가 있을 수 있습니다.

접미사 의미
l long 데이터 형식
kb kibibyte (10241) 승수
mb mebibyte (10242) 승수
gb gigibyte (10243) 승수
tb 테리바이트 (1024 4) 승수
pb petibyte (10245) 승수

정수 리터럴의 형식은 해당 값, 형식 접미사 및 숫자 승수 접미사에 의해 결정됩니다.

형식 접미사가 없는 정수 리터럴의 경우:

  • 값을 형식으로 나타낼 수 있는 경우 해당 형식 [int]입니다.
  • 그렇지 않은 경우 값을 형식으로 나타낼 수 있으면 해당 형식 [long]입니다.
  • 그렇지 않은 경우 값을 형식으로 나타낼 수 있으면 해당 형식 [decimal]입니다.
  • 그렇지 않으면 형식 [double]으로 표시됩니다.

형식 접미사가 있는 정수 리터럴의 경우:

  • 형식 접미사가 u 있고 값을 형식 [int] 으로 나타낼 수 있는 경우 해당 형식은 입니다 [int].
  • 형식 접미사가 u 있고 값을 형식 [long] 으로 나타낼 수 있는 경우 해당 형식은 입니다 [long].
  • 해당 값을 지정된 형식으로 나타낼 수 있으면 해당 형식입니다.
  • 그렇지 않으면 해당 리터럴의 형식이 잘못되었습니다.

실제 리터럴

실제 리터럴은 10진수 표기법으로만 작성할 수 있습니다. 이 표기법은 지수 부분을 사용하는 소수점 및 과학적 표기법을 따르는 소수 값을 포함할 수 있습니다.

지수 부분에는 'e'와 선택적 기호(+/-) 및 지수를 나타내는 숫자가 포함됩니다. 예를 들어 리터럴 값 1e2 은 숫자 값 100과 같습니다.

실제 리터럴에는 형식 접미사와 승수 접미사가 있을 수 있습니다.

접미사 의미
d 10진수 데이터 형식
kb kibibyte (10241) 승수
mb mebibyte (10242) 승수
gb gigibyte (10243) 승수
tb 테리바이트 (1024 4) 승수
pb petibyte (10245) 승수

실제 리터럴에는 이중 및 소수점이라는 두 가지 종류가 있습니다. 각각 소수 형식 접미사의 부재 또는 존재 여부가 표시됩니다. PowerShell은 값의 리터럴 표현을 [float] 지원하지 않습니다. double real 리터럴에는 형식이 있습니다 [double]. 10진수 실제 리터럴에는 형식 [decimal]이 있습니다. 소수 실제 리터럴의 분수 부분에 있는 후행 0은 중요합니다.

실제 리터럴의 지수 부분 자릿수 [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은 다음 형식 가속기를 지원합니다.

액셀러레이터 참고 항목 설명
[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비트 부동 소수점

다른 숫자 형식 작업

다른 숫자 형식을 사용하려면 몇 가지 문제가 없는 형식 가속기를 사용해야 합니다. 예를 들어 높은 정수 값은 항상 다른 형식으로 캐스팅되기 전에 double로 구문 분석됩니다.

PS> [bigint]111111111111111111111111111111111111111111111111111111
111111111111111100905595216014112456735339620444667904

값은 먼저 double로 구문 분석되어 더 높은 범위에서 정밀도가 손실됩니다. 이 문제를 방지하려면 값을 문자열로 입력한 다음 변환합니다.

PS> [bigint]'111111111111111111111111111111111111111111111111111111'
111111111111111111111111111111111111111111111111111111

예시

다음 표에는 숫자 리터럴의 몇 가지 예제가 포함되어 있으며 해당 형식과 값이 나열되어 있습니다.

number Type
100 Int32 100
100D 소수 100
100l Int64 100
1e2 Double 100
1.e2 Double 100
0x1e2 Int32 482
0x1e2L Int64 482
0x1e2D Int32 7725
482D 소수 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

PowerShell 파서가 숫자 리터럴이 끝나고 GetType 메서드가 시작되는 위치를 결정할 수 있으므로 처음 두 예제는 리터럴 값을 괄호로 묶지 않고 작동합니다.