형식 변환 함수(Visual Basic)

이러한 함수는 인라인으로 컴파일됩니다. 즉, 변환 코드는 식을 평가하는 코드의 일부입니다. 때로는 변환을 수행하기 위한 프로시저를 호출하지 않아 성능이 개선되는 경우도 있습니다. 각 함수는 식을 특정 데이터 형식으로 강제 변환합니다.

구문

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 Boolean 데이터 형식 유효한 Char, String 또는 숫자 식.
CByte Byte 데이터 형식 Byte.MinValue(0) ~ Byte.MaxValue(255)(부호 없음), 소수 부분은 반올림됩니다.1

Visual Basic 15.8부터 Visual Basic은 CByte 함수를 사용하여 부동 소수점-바이트 변환 성능을 최적화합니다. 자세한 내용은 설명 섹션을 참조하세요. 예를 보려면 CInt 예 섹션을 참조하세요.
CChar Char 데이터 형식 유효한 Char 또는 String 식. String의 첫 번째 문자만 변환됩니다. 값은 0부터 65535까지(부호 없음)일 수 있습니다.
CDate Date 데이터 형식 날짜 및 시간의 유효한 표현입니다.
CDbl Double 데이터 형식 음수 값의 경우 -1.79769313486231570E+308 ~ -4.94065645841246544E-324, 양수 값의 경우 4.94065645841246544E-324 ~ 1.79769313486231570E+308입니다.
CDec Decimal 데이터 형식 0 단위 숫자, 즉 소수 자릿수가 없는 숫자의 경우 +/-79,228,162,514,264,337,593,543,950,335입니다. 소수점 이하 28자리 숫자의 경우 범위는 +/-7.9228162514264337593543950335입니다. 0이 아닌 가능한 가장 작은 숫자는 0.0000000000000000000000000001(+/-1E-28)입니다.
CInt Integer 데이터 형식 Int32.MinValue(-2,147,483,648) ~ Int32.MaxValue(2,147,483,647), 소수 부분은 반올림됩니다.1

Visual Basic 15.8부터 Visual Basic은 CInt 함수를 사용하여 부동 소수점에서 정수로의 변환 성능을 최적화합니다. 자세한 내용은 설명 섹션을 참조하세요. 예를 보려면 CInt 예 섹션을 참조하세요.
CLng Long 데이터 형식 Int64.MinValue(-9,223,372,036,854,775,808) ~ Int64.MaxValue(9,223,372,036,854,775,807), 소수 부분은 반올림됩니다.1

Visual Basic 15.8부터 Visual Basic은 CLng 함수를 사용하여 부동 소수점에서 64비트 정수로의 변환 성능을 최적화합니다. 자세한 내용은 설명 섹션을 참조하세요. 예를 보려면 CInt 예 섹션을 참조하세요.
CObj Object Data Type 유효한 식입니다.
CSByte SByte 데이터 형식 SByte.MinValue(-128) ~ SByte.MaxValue(127), 소수 부분은 반올림됩니다.1

Visual Basic 15.8부터 Visual Basic은 CSByte 함수를 사용하여 부동 소수점에서 부호 있는 바이트로의 변환 성능을 최적화합니다. 자세한 내용은 설명 섹션을 참조하세요. 예를 보려면 CInt 예 섹션을 참조하세요.
CShort Short 데이터 형식 Int16.MinValue(-32,768) ~ Int16.MaxValue(32,767), 소수 부분은 반올림됩니다.1

Visual Basic 15.8부터 Visual Basic은 CShort 함수를 사용하여 부동 소수점을 16비트 정수로 변환하는 성능을 최적화합니다. 자세한 내용은 설명 섹션을 참조하세요. 예를 보려면 CInt 예 섹션을 참조하세요.
CSng Single 데이터 형식 -3.402823E+38 ~ -1.401298E-45(음수), 1.401298E-45 ~ 3.402823E+38(양수)입니다.
CStr String 데이터 형식 CStr에 대한 반환은 expression 인수에 따라 달라집니다. CStr 함수의 반환 값을 참조하세요.
CUInt UInteger 데이터 형식 UInt32.MinValue(0) ~UInt32.MaxValue(4,294,967,295)(부호 없음), 소수 부분은 반올림됩니다.1

Visual Basic 15.8부터 Visual Basic은 CUInt 함수를 사용하여 부동 소수점을 부호 없는 정수로 변환하는 성능을 최적화합니다. 자세한 내용은 설명 섹션을 참조하세요. 예를 보려면 CInt 예 섹션을 참조하세요.
CULng ULong 데이터 형식 UInt64.MinValue(0) ~ UInt64.MaxValue(18,446,744,073,709,551,615)(부호 없음), 소수 부분은 반올림됩니다.1

Visual Basic 15.8부터 Visual Basic은 CULng 함수를 사용하여 부동 소수점을 부호 없는 정수(Long)로 변환하는 성능을 최적화합니다. 자세한 내용은 설명 섹션을 참조하세요. 예를 보려면 CInt 예 섹션을 참조하세요.
CUShort UShort 데이터 형식 UInt16.MinValue(0) ~ UInt16.MaxValue(65,535)(부호 없음), 소수 부분은 반올림됩니다.1

Visual Basic 15.8부터 Visual Basic은 CUShort 함수를 사용하여 부동 소수점을 부호 없는 16비트 정수로 변환하는 성능을 최적화합니다. 자세한 내용은 설명 섹션을 참조하세요. 예를 보려면 CInt 예 섹션을 참조하세요.

1 소수 부분에는 짝수로 반올림이라는 특별한 형식의 반올림이 적용될 수 있습니다. 자세한 내용은 "설명"을 참조하세요.

설명

일반적으로 Convert 클래스나 개별 형식 구조체 또는 클래스에서 ToString()과 같은 .NET Framework 메서드보다 Visual Basic 형식 변환 함수를 우선적으로 사용해야 합니다. Visual Basic 함수는 Visual Basic 코드와의 최적의 상호 작용을 위해 설계되었으며 소스 코드를 더 짧고 읽기 쉽게 만듭니다. 또한 .NET Framework 변환 메서드는 예를 들어, BooleanInteger로 변환할 때 Visual Basic 함수와 동일한 결과를 생성하지 않을 수도 있습니다. 자세한 내용은 데이터 유형 문제 해결을 참조하세요.

Visual Basic 15.8부터 다음 메서드에서 반환된 Single 또는 Double 값을 정수 변환 함수(CByte, CShort, CInt, CLng, CSByte, CUShort, CUInt, CULng) 중 하나에 전달할 때 부동 소수점에서 정수로 변환 성능이 최적화됩니다.

이러한 최적화를 통해 다수의 정수 변환을 수행하는 코드를 최대 2배 빠르게 실행할 수 있습니다. 다음 예에서는 최적화된 부동 소수점에서 정수로의 변환을 보여 줍니다.

Dim s As Single = 173.7619
Dim d As Double = s

Dim i1 As Integer = CInt(Fix(s))               ' Result: 173
Dim b1 As Byte = CByte(Int(d))                 ' Result: 173
Dim s1 AS Short = CShort(Math.Truncate(s))     ' Result: 173
Dim i2 As Integer = CInt(Math.Ceiling(d))      ' Result: 174
Dim i3 As Integer = CInt(Math.Round(s))        ' Result: 174

동작

  • 강제 변환. 일반적으로 데이터 형식 변환 함수를 사용하여 연산 결과를 기본 데이터 형식이 아닌 특정 데이터 형식으로 강제 변환할 수 있습니다. 예를 들어, 단정밀도, 배정밀도 또는 정수 연산이 일반적으로 수행되는 경우 CDec를 사용하여 소수 연산을 적용합니다.

  • 실패한 변환. 함수에 전달된 expression이 변환될 데이터 형식의 범위를 벗어나면 OverflowException이 발생합니다.

  • 소수 부분. 비정수 값을 정수 형식으로 변환하면 정수 변환 함수(CByte, CInt, CLng, CSByte, CShort, CUInt, CULngCUShort)는 소수 부분을 제거하고 값을 가장 가까운 정수로 반올림합니다.

    소수 부분이 정확히 0.5인 경우 정수 변환 함수는 이를 가장 가까운 짝수로 반올림합니다. 예를 들어, 0.5는 0으로 반올림되고, 1.5와 2.5는 모두 2로 반올림됩니다. 이를 짝수로 반올림이라고도 하며, 그 목적은 이러한 숫자를 많이 더할 때 누적될 수 있는 바이어스를 보상하는 것입니다.

    CIntCLng는 숫자의 소수 부분을 반올림하는 대신 잘라내는 IntFix 함수와 다릅니다. 또한 FixInt는 항상 전달한 것과 동일한 데이터 형식의 값을 반환합니다.

  • 날짜/시간 변환. 값을 날짜 및 시간으로 변환할 수 있는지 확인하려면 IsDate 함수를 사용합니다. CDate는 날짜 리터럴과 시간 리터럴을 인식하지만 숫자 값은 인식하지 않습니다. Visual Basic 6.0 Date 값을 Visual Basic 2005 이상 버전의 Date 값으로 변환하려면 DateTime.FromOADate 메서드를 사용할 수 있습니다.

  • 중립 날짜/시간 값. 날짜 데이터 형식에는 항상 날짜 및 시간 정보가 모두 포함됩니다. 형식 변환을 위해 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 함수와 같은 함수를 사용하여 복구할 수 있습니다.

  • 문화권 민감도. 문자열과 관련된 형식 변환 함수는 애플리케이션의 현재 문화권 설정을 기반으로 변환을 수행합니다. 예를 들어, CDate는 시스템의 로캘 설정에 따라 날짜 형식을 인식합니다. 일, 월, 연도를 해당 로캘에 맞는 순서로 제공해야 합니다. 그렇지 않으면 날짜가 올바르게 해석되지 않을 수 있습니다. "수요일"과 같은 요일 문자열이 포함된 경우 자세한 날짜 표기 형식이 인식되지 않습니다.

    로캘에 지정된 형식이 아닌 형식의 값에 대한 문자열 표현으로 변환하거나 그 반대로 변환해야 하는 경우 Visual Basic 형식 변환 함수를 사용할 수 없습니다. 이렇게 하려면 해당 값 형식의 ToString(IFormatProvider)Parse(String, IFormatProvider) 메서드를 사용합니다. 예를 들어, 문자열을 Double로 변환할 때 Double.Parse를 사용하고, Double 형식의 값을 문자열로 변환할 때 Double.ToString을 사용합니다.

CType Function

CType 함수는 두 번째 인수인 typename을 취하고 expressiontypename으로 강제 변환합니다. 여기서 typename은 유효한 변환이 존재하는 모든 데이터 형식, 구조체, 클래스 또는 인터페이스일 수 있습니다.

CType을 다른 형식 변환 키워드와 비교하려면 DirectCast 연산자TryCast 연산자를 참조하세요.

CBool 예

다음 예에서는 CBool 함수를 사용하여 식을 Boolean 값으로 변환합니다. 식이 0이 아닌 값으로 평가되면 CBoolTrue를 반환합니다. 그렇지 않으면 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)

C바이트 예

다음 예에서는 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 함수를 사용하여 숫자 문자열을 가져오고, 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은 항상 현재 로캘에 대한 표준 짧은 형식(예: "6/15/2003 4:35:47 PM")으로 Date 값을 렌더링합니다. 그러나 CStr은 날짜의 경우 1/1/0001, 시간의 경우 00:00:00이라는 중립 값을 표시하지 않습니다.

CStr에서 반환된 값에 대한 자세한 내용은 CStr 함수의 반환 값을 참조하세요.

CUnt 예

다음 예에서는 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)

참고 항목