형식 변환 함수
업데이트: 2007년 11월
형식 변환 함수는 인라인으로 컴파일됩니다. 이는 변환 코드가 식을 계산하는 코드의 일부임을 의미합니다. 경우에 따라 변환을 수행하기 위해 프로시저를 호출할 필요가 없으므로 실행 속도가 빨라집니다. 다음의 각 함수는 해당 식을 특정 데이터 형식으로 변환합니다.
CBool(expression)
CByte(expression)
CChar(expression)
CDate(expression)
CDbl(expression)
CDec(expression)
CInt(expression)
CLng(expression)
CObj(expression)
CSByte(expression)
CShort(expression)
CSng(expression)
CStr(expression)
CUInt(expression)
CULng(expression)
CUShort(expression)
구성 요소
- expression
필수적 요소. 소스 데이터 형식의 임의 식입니다.
반환 값 데이터 형식
다음 표에서 볼 수 있듯이 함수가 반환하는 값의 데이터 형식은 함수 이름에 따라 결정됩니다.
함수 이름 |
반환 데이터 형식 |
expression 인수 범위 |
---|---|---|
CBool |
임의의 유효한 Char 또는 String이나 숫자 식입니다. |
|
CByte |
값의 범위는 0에서 255까지(부호가 없으며 소수 부분은 반올림됨1)입니다. |
|
CChar |
임의의 유효한 Char 또는 String 식입니다. String의 첫 문자만 변환되며 값의 범위는 0에서 65535까지(부호 없음)입니다. |
|
CDate |
임의의 유효한 날짜 및 시간 표시 |
|
CDbl |
값의 범위는 -1.79769313486231570E+308에서 -4.94065645841246544E-324까지(음수) 또는 4.94065645841246544E-324에서 1.79769313486231570E+308까지(양수)입니다. |
|
CDec |
소수 자릿수가 없는 숫자(소수 부분이 없는 숫자)의 경우 범위는 +/-79,228,162,514,264,337,593,543,950,335 사이이고, 소수 자릿수가 28개인 숫자의 경우에 범위는 +/-7.9228162514264337593543950335 사이이며, 0이 아닌 숫자 중 가장 작은 숫자는 0.0000000000000000000000000001(+/-1E-28)입니다. |
|
CInt |
값의 범위는 -2,147,483,648에서 2,147,483,647까지(소수 부분은 반올림됨1)입니다. |
|
CLng |
값의 범위는 -9,223,372,036,854,775,808에서 9,223,372,036,854,775,807까지(소수 부분은 반올림됨1)입니다. |
|
CObj |
임의의 유효한 식입니다. |
|
CSByte |
값의 범위는 -128에서 127까지(소수 부분은 반올림됨1)입니다. |
|
CShort |
값의 범위는 -32,768에서 32,767까지(소수 부분은 반올림됨1)입니다. |
|
CSng |
-3.402823E+38 ~ -1.401298E-45(음수), 1.401298E-45 ~ 3.402823E+38(양수) |
|
CStr |
CStr에 대한 반환은 expression 인수에 따라 다릅니다( CStr 함수의 반환 값 참조). |
|
CUInt |
값의 범위는 0에서 4,294,967,295까지(부호가 없으며 소수 부분은 반올림됨1)입니다. |
|
CULng |
값의 범위는 0에서 18,446,744,073,709,551,615까지(부호가 없으며 소수 부분은 반올림됨1)입니다. |
|
CUShort |
값의 범위는 0에서 65,535까지(부호가 없으며 소수 부분은 반올림됨1)입니다. |
1 소수 부분에는 은행원 반올림이라고 하는 특수한 형식의 반올림 규칙이 적용될 수 있습니다. 자세한 내용은 "설명" 부분을 참조하십시오.
설명
일반적으로 Convert 클래스나 개별 형식 구조체 또는 클래스에서는 ToString() 같은 .NET Framework 메서드보다 Visual Basic 형식 변환 함수를 우선적으로 사용해야 합니다. Visual Basic 함수는 Visual Basic 코드와 최적으로 상호 작용하도록 설계되었으며 소스 코드를 보다 간단하고 읽기 쉽게 만듭니다. 또한 .NET Framework 변환 메서드가 항상 Visual Basic 함수와 동일한 결과를 생성하는 것은 아닙니다(예: Boolean을 Integer로 변환하는 경우). 자세한 내용은 데이터 형식 문제 해결을 참조하십시오.
동작
강제 변환. 일반적으로 데이터 형식 변환 함수를 사용하여 연산의 결과를 기본 데이터 형식이 아닌 특정 데이터 형식으로 강제 변환할 수 있습니다. 예를 들어, 단정밀도, 배정밀도 또는 정수 연산이 발생할 경우 CDec 함수를 사용하여 10진수 연산을 계산합니다.
변환 실패. 함수에 전달된 expression이 변환될 데이터 형식의 범위 밖에 있으면 OverflowException이 발생합니다.
소수 부분. 정수가 아닌 값을 정수 계열 형식으로 변환할 경우 정수 변환 함수(CByte, CInt, CLng, CSByte, CShort, CUInt, CULng 및 CUShort)는 소수 부분을 제거하고 값을 가장 가까운 정수로 반올림합니다.
소수 부분이 정확하게 0.5이면 정수 변환 함수는 값을 가장 가까운 짝수 정수로 반올림합니다. 예를 들어, 0.5는 0으로 반올림되고 1.5와 2.5는 2로 반올림됩니다. 이를 은행원 반올림이라고도 합니다. 이 반올림 규칙은 이러한 숫자를 여러 개 더할 경우에 누적될 수 있는 오차를 보정할 수 있습니다.
CInt와 CLng와 달리 Int, Fix 함수(Visual Basic)는 소수 부분을 반올림하지 않고 버립니다. 또한 Fix와 Int는 항상 사용자가 전달한 값과 같은 데이터 형식 값을 반환합니다.
날짜/시간 변환.IsDate 함수(Visual Basic)는 임의의 값을 날짜 및 시간으로 변환할 수 있는지 확인할 때 사용합니다. CDate는 날짜 리터럴과 시간 리터럴을 인식하지만 숫자 값은 인식하지 않습니다. Visual Basic 6.0 Date 값을 Visual Basic 2005 이상 버전의 Date 값으로 변환하려면 DateTime.FromOADate 메서드를 사용합니다.
기본 날짜/시간 값.Date 데이터 형식(Visual Basic)에는 항상 날짜 정보와 시간 정보가 모두 포함됩니다. 형식 변환을 목적으로, Visual Basic은 1/1/0001(1년 1월 1일)을 날짜의 기본값으로 간주하고 00:00:00(자정)을 시간의 기본값으로 간주합니다. Date 값을 문자열로 변환할 경우 CStr의 결과 문자열에 기본값이 포함되지 않습니다. 예를 들어, #January 1, 0001 9:30:00#을 문자열로 변환한 결과는 "9:30:00 AM"이며 날짜 정보는 표시되지 않습니다. 그러나 날짜 정보는 원래 Date 값에 그대로 있으며 DatePart 함수(Visual Basic) 등의 함수를 사용하여 복구할 수 있습니다.
문화권 구분. 문자열을 포함하는 형식 변환 함수는 응용 프로그램의 현재 문화권 설정에 기초하여 변환을 수행합니다. 예를 들어, CDate는 시스템의 로캘 설정에 따라 날짜 형식을 인식합니다. 사용자 로캘에 맞는 순서로 일, 월, 년을 지정해야 합니다. 그렇지 않으면 날짜가 올바르게 해석되지 않을 수 있습니다. "Wednesday"와 같은 요일 문자열이 들어 있는 경우 long 날짜 형식은 인식되지 않습니다.
로캘에 지정된 것과 다른 형식의 값 문자열 표현으로 변환하거나 이러한 표현에서 변환해야 할 경우에는 Visual Basic 형식 변환 함수를 사용할 수 없습니다. 이렇게 하려면 해당 값 형식의 ToString(IFormatProvider) 및 Parse(String, IFormatProvider) 메서드를 사용합니다. 예를 들어, 문자열을 Double로 변환할 경우 Double.Parse를 사용하고 Double 형식의 값을 문자열로 변환할 경우 Double.ToString을 사용합니다.
CType 함수
CType 함수는 두 번째 인수 typename을 가져와서 expression을 typename으로 강제 변환합니다. typename은 유효한 변환이 존재하는 임의의 데이터 형식, 구조체, 클래스 또는 인터페이스입니다.
CType과 다른 형식 변환 키워드를 비교하려면 DirectCast 및 TryCast를 참조하십시오.
CBool 예제
다음 예제에서는 CBool 함수를 사용하여 식을 Boolean 값으로 변환합니다. CBool은 식의 계산 결과가 0이 아니면 True를 반환하고, 0이면 False를 반환합니다.
Dim a, b, c As Integer
Dim check As Boolean
a = 5
b = 5
' The following line of code sets check to True.
check = CBool(a = b)
c = 0
' The following line of code sets check to False.
check = CBool(c)
CByte 예제
다음 예제에서는 CByte 함수를 사용하여 식을 Byte로 변환합니다.
Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)
CChar 예제
다음 예제에서는 CChar 함수를 사용하여 String 식의 첫 번째 문자를 Char 형식으로 변환합니다.
Dim aString As String
Dim aChar As Char
' CChar converts only the first character of the string.
aString = "BCD"
' The following line of code sets aChar to "B".
aChar = CChar(aString)
CChar에 대한 입력 인수는 Char 또는 String 데이터 형식이어야 합니다. CChar는 숫자 데이터 형식을 허용하지 않기 때문에 CChar를 사용하여 숫자를 문자로 변환할 수 없습니다. 다음 예제에서는 코드 포인트(문자 코드)를 나타내는 숫자를 구하여 해당 문자로 변환합니다. InputBox 함수(Visual Basic)를 사용하여 숫자 문자열을 구하고 CInt를 사용하여 문자열을 Integer 형식으로 변환하고, ChrW를 사용하여 숫자를 Char 형식으로 변환합니다.
Dim someDigits As String
Dim codePoint As Integer
Dim thisChar As Char
someDigits = InputBox("Enter code point of character:")
codePoint = CInt(someDigits)
' The following line of code sets thisChar to the Char value of codePoint.
thisChar = ChrW(codePoint)
CDate 예제
다음 예제에서는 CDate 함수를 사용하여 문자열을 Date 값으로 변환합니다. 일반적으로 다음 예제와 같이 날짜와 시간을 문자열로 하드 코딩하는 것은 좋지 않습니다. 대신 #Feb 12, 1969#, #4:45:23 PM# 등과 같은 날짜 리터럴과 시간 리터럴을 사용하십시오.
Dim aDateString, aTimeString As String
Dim aDate, aTime As Date
aDateString = "February 12, 1969"
aTimeString = "4:35:47 PM"
' The following line of code sets aDate to a Date value.
aDate = CDate(aDateString)
' The following line of code sets aTime to Date value.
aTime = CDate(aTimeString)
CDbl 예제
Dim aDec As Decimal
Dim aDbl As Double
' The following line of code uses the literal type character D to make aDec a Decimal.
aDec = 234.456784D
' The following line of code sets aDbl to 1.9225456288E+1.
aDbl = CDbl(aDec * 8.2D * 0.01D)
CDec 예제
다음 예제에서는 CDec 함수를 사용하여 숫자 값을 Decimal로 변환합니다.
Dim aDouble As Double
Dim aDecimal As Decimal
aDouble = 10000000.0587
' The following line of code sets aDecimal to 10000000.0587.
aDecimal = CDec(aDouble)
CInt 예제
다음 예제에서는 CInt 함수를 사용하여 값을 Integer로 변환합니다.
Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)
CLng 예제
다음 예제에서는 CLng 함수를 사용하여 값을 Long으로 변환합니다.
Dim aDbl1, aDbl2 As Double
Dim aLng1, aLng2 As Long
aDbl1 = 25427.45
aDbl2 = 25427.55
' The following line of code sets aLng1 to 25427.
aLng1 = CLng(aDbl1)
' The following line of code sets aLng2 to 25428.
aLng2 = CLng(aDbl2)
CObj 예제
다음 예제에서는 CObj 함수를 사용하여 숫자 값을 Object로 변환합니다. Object 변수 자체에는 할당된 Double 값을 가리키는 4바이트 포인터만 들어 있습니다.
Dim aDouble As Double
Dim anObject As Object
aDouble = 2.7182818284
' The following line of code sets anObject to a pointer to aDouble.
anObject = CObj(aDouble)
CSByte 예제
다음 예제에서는 CSByte 함수를 사용하여 숫자 값을 SByte로 변환합니다.
Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)
CShort 예제
다음 예제에서는 CShort 함수를 사용하여 숫자 값을 Short으로 변환합니다.
Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)
CSng 예제
다음 예제에서는 CSng 함수를 사용하여 값을 Single로 변환합니다.
Dim aDouble1, aDouble2 As Double
Dim aSingle1, aSingle2 As Single
aDouble1 = 75.3421105
aDouble2 = 75.3421567
' The following line of code sets aSingle1 to 75.34211.
aSingle1 = CSng(aDouble1)
' The following line of code sets aSingle2 to 75.34216.
aSingle2 = CSng(aDouble2)
CStr 예제
다음 예제에서는 CStr 함수를 사용하여 숫자 값을 String으로 변환합니다.
Dim aDouble As Double
Dim aString As String
aDouble = 437.324
' The following line of code sets aString to "437.324".
aString = CStr(aDouble)
다음 예제에서는 CStr 함수를 사용하여 Date 값을 String 값으로 변환합니다.
Dim aDate As Date
Dim aString As String
' The following line of code generates a COMPILER ERROR because of invalid format.
' aDate = #February 12, 1969 00:00:00#
' Date literals must be in the format #m/d/yyyy# or they are invalid.
' The following line of code sets the time component of aDate to midnight.
aDate = #2/12/1969#
' The following conversion suppresses the neutral time value of 00:00:00.
' The following line of code sets aString to "2/12/1969".
aString = CStr(aDate)
' The following line of code sets the time component of aDate to one second past midnight.
aDate = #2/12/1969 12:00:01 AM#
' The time component becomes part of the converted value.
' The following line of code sets aString to "2/12/1969 12:00:01 AM".
aString = CStr(aDate)
CStr은 항상 현재 로캘에 대한 표준 short 형식으로 Date 값을 렌더링합니다(예: "6/15/2003 4:35:47 PM"). 그러나 CStr는 날짜와 시간에 대한 기본값인 1/1/0001 및 00:00:00을 표시하지 않습니다.
CStr에 의해 반환되는 값에 대한 자세한 내용은 CStr 함수의 반환 값을 참조하십시오.
CUInt 예제
다음 예제에서는 CUInt 함수를 사용하여 숫자 값을 UInteger로 변환합니다.
Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)
CULng 예제
다음 예제에서는 CULng 함수를 사용하여 숫자 값을 ULong으로 변환합니다.
Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)
CUShort 예제
다음 예제에서는 CUShort 함수를 사용하여 숫자 값을 UShort으로 변환합니다.
Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)