Funkcje konwersji typu (Visual Basic)
Te funkcje są kompilowane w tekście, co oznacza, że kod konwersji jest częścią kodu, który ocenia wyrażenie. Czasami nie ma wywołania procedury w celu przeprowadzenia konwersji, co zwiększa wydajność. Każda funkcja przekształca wyrażenie w określony typ danych.
Składnia
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)
Element
expression
Wymagany. Dowolne wyrażenie typu danych źródłowych.
Zwracany typ danych wartości
Nazwa funkcji określa typ danych zwracanej wartości, jak pokazano w poniższej tabeli.
Nazwa funkcji | Zwracanie typu danych | Zakres argumentu expression |
---|---|---|
CBool |
Boolean, typ danych | Dowolne prawidłowe Char lub String liczbowe wyrażenie. |
CByte |
Byte, typ danych | Byte.MinValue (0) do Byte.MaxValue (255) (bez znaku); części ułamkowe są zaokrąglane.1 Począwszy od języka Visual Basic 15.8, Visual Basic optymalizuje wydajność konwersji zmiennoprzecinkowych na bajt z funkcją CByte ; zobacz sekcję Uwagi , aby uzyskać więcej informacji. Zobacz przykładową sekcję CInt Example (Przykład CInt). |
CChar |
Char, typ danych | Dowolne prawidłowe Char lub String wyrażenie; tylko pierwszy znak elementu String jest konwertowany; wartość może wynosić od 0 do 65535 (bez znaku). |
CDate |
Date, typ danych | Każda prawidłowa reprezentacja daty i godziny. |
CDbl |
Double, typ danych | -1.79769313486231570E+308 do -4.94065645841246544E-324 dla wartości ujemnych; 4.94065645841246544E-324 do 1.79769313486231570E+308 dla wartości dodatnich. |
CDec |
Decimal, typ danych | +/-79,228,162,514,264,337,593,543,950,335 dla liczb ze skalowaniem zerowym, czyli liczb bez miejsc dziesiętnych. W przypadku liczb z 28 miejscami dziesiętnymi zakres to +/-7.922816251426433759354395035. Najmniejsza możliwa liczba niezerowa to 0,0000000000000000000000000001 (+/-1E-28). |
CInt |
Integer, typ danych | Int32.MinValue (-2,147,483,648) do Int32.MaxValue (2,147,483,647); części ułamkowe są zaokrąglane.1 Począwszy od języka Visual Basic 15.8, Visual Basic optymalizuje wydajność konwersji zmiennoprzecinkowych na liczbę całkowitą z funkcją CInt ; zobacz sekcję Uwagi , aby uzyskać więcej informacji. Zobacz przykładową sekcję CInt Example (Przykład CInt). |
CLng |
Long, typ danych | Int64.MinValue (-9,223,372,036,854,775,808) do Int64.MaxValue (9,223,372,036,854,775,807); części ułamkowe są zaokrąglane.1 Począwszy od języka Visual Basic 15.8, Visual Basic optymalizuje wydajność konwersji liczb zmiennoprzecinkowych na 64-bitową liczbę całkowitą z funkcją CLng . Więcej informacji można znaleźć w sekcji Uwagi . Zobacz przykładową sekcję CInt Example (Przykład CInt). |
CObj |
Object, typ danych | Dowolne prawidłowe wyrażenie. |
CSByte |
SByte, typ danych | SByte.MinValue (-128) do SByte.MaxValue (127); części ułamkowe są zaokrąglane.1 Począwszy od języka Visual Basic 15.8, Visual Basic optymalizuje wydajność konwersji bajtów ze znakiem do podpisanej CSByte konwersji bajtów za pomocą funkcji. Aby uzyskać więcej informacji, zobacz sekcję Uwagi. Zobacz przykładową sekcję CInt Example (Przykład CInt). |
CShort |
Short, typ danych | Int16.MinValue (-32,768) do Int16.MaxValue (32,767); części ułamkowe są zaokrąglane.1 Począwszy od programu Visual Basic 15.8, Visual Basic optymalizuje wydajność konwersji liczb zmiennoprzecinkowych na 16-bitową liczbę całkowitą z funkcją CShort . Aby uzyskać więcej informacji, zobacz sekcję Uwagi . Zobacz przykładową sekcję CInt Example (Przykład CInt). |
CSng |
Single, typ danych | -3.402823E+38 do -1.401298E-45 dla wartości ujemnych; 1.401298E-45 do 3.402823E+38 dla wartości dodatnich. |
CStr |
String, typ danych | Zwraca wartość dla elementu CStr zależy od argumentu expression . Zobacz Zwracane wartości funkcji CStr. |
CUInt |
UInteger, typ danych | UInt32.MinValue (0) do UInt32.MaxValue (4 294 967 295) (bez znaku); części ułamkowe są zaokrąglane.1 Począwszy od języka Visual Basic 15.8, Visual Basic optymalizuje wydajność zmiennoprzecinkowych do niepodpisanej konwersji całkowitej CUInt z funkcją; zobacz sekcję Uwagi, aby uzyskać więcej informacji. Zobacz przykładową sekcję CInt Example (Przykład CInt). |
CULng |
ULong, typ danych | UInt64.MinValue (0) do UInt64.MaxValue (od 18 446 744 073 709 551 615) (niepodpisane); części ułamkowe są zaokrąglane.1 Począwszy od języka Visual Basic 15.8, Visual Basic optymalizuje wydajność zmiennoprzecinkowych do niepodpisanej konwersji długiej liczby całkowitej CULng z funkcją; zobacz sekcję Uwagi, aby uzyskać więcej informacji. Zobacz przykładową sekcję CInt Example (Przykład CInt). |
CUShort |
UShort, typ danych | UInt16.MinValue (0) do UInt16.MaxValue (65 535) (bez znaku); części ułamkowe są zaokrąglane.1 Począwszy od języka Visual Basic 15.8, Visual Basic optymalizuje wydajność zmiennoprzecinkowa do niepodpisanej konwersji liczby całkowitej 16-bitowej z funkcją CUShort ; zobacz sekcję Uwagi, aby uzyskać więcej informacji. Zobacz przykładową sekcję CInt Example (Przykład CInt). |
1 Części ułamkowe mogą podlegać specjalnemu typowi zaokrąglania nazywanego zaokrąglaniem bankiera. Aby uzyskać więcej informacji, zobacz "Uwagi".
Uwagi
Zgodnie z regułą należy użyć funkcji konwersji typów języka Visual Basic w preferencjach do metod programu .NET Framework, takich jak ToString()
, w Convert klasie lub w pojedynczej strukturze typu lub klasie. Funkcje języka Visual Basic zostały zaprojektowane pod kątem optymalnej interakcji z kodem Języka Visual Basic, a także sprawiają, że kod źródłowy jest krótszy i łatwiejszy do odczytania. Ponadto metody konwersji programu .NET Framework nie zawsze generują takie same wyniki jak funkcje języka Visual Basic, na przykład podczas konwertowania Boolean
na Integer
. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z typami danych.
Począwszy od języka Visual Basic 15.8, wydajność konwersji zmiennoprzecinkowej na liczbę całkowitą jest zoptymalizowana po przekazaniu wartości lub zwracanej przez następujące metody do jednej z funkcji konwersji całkowitej (CByte
CShort
, , , CInt
CLng
CSByte
, , CUShort
, ): CULng
CUInt
DoubleSingle
- Conversion.Fix(Double)
- Conversion.Fix(Object)
- Conversion.Fix(Single)
- Conversion.Int(Double)
- Conversion.Int(Object)
- Conversion.Int(Single)
- Math.Ceiling(Double)
- Math.Floor(Double)
- Math.Round(Double)
- Math.Truncate(Double)
Dzięki tej optymalizacji kod, który wykonuje dużą liczbę konwersji liczb całkowitych, może działać maksymalnie dwukrotnie szybciej. Poniższy przykład ilustruje te zoptymalizowane konwersje zmiennoprzecinkowe do liczby całkowitej:
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
Zachowanie
Przymus. Ogólnie rzecz biorąc, można użyć funkcji konwersji typów danych, aby wykorzystać wynik operacji do określonego typu danych, a nie domyślnego typu danych. Na przykład użyj polecenia
CDec
, aby wymusić arytmetyczną dziesiętną w przypadkach, gdy zwykle odbywa się arytmetyka z pojedynczą precyzją, podwójną precyzją lub liczbą całkowitą.Nieudane konwersje. Jeśli przekazana
expression
do funkcji znajduje się poza zakresem typu danych, do którego ma zostać przekonwertowana, wystąpi.OverflowExceptionCzęści ułamkowe. Podczas konwertowania wartości nieintegralnej na typ całkowity funkcje konwersji liczb całkowitych (
CByte
,CInt
,CShort
CSByte
CUInt
CLng
CULng
iCUShort
) usuwają część ułamkową i zaokrąglają wartość do najbliższej liczby całkowitej.Jeśli część ułamkowa wynosi dokładnie 0,5, funkcje konwersji liczby całkowitej zaokrąglają ją do najbliższej równej liczby całkowitej. Na przykład 0,5 rund do 0 i 1,5 i 2,5 obie rundy do 2. Jest to czasami nazywane zaokrąglanie bankiera, a jego celem jest zrekompensowanie stronniczości, która może gromadzić się podczas dodawania wielu takich liczb razem.
CInt
iCLng
różnią się od Int funkcji i Fix , które obcinają, a nie zaokrąglają części ułamkowej liczby.Fix
Ponadto iInt
zawsze zwracają wartość tego samego typu danych, które są przekazywane.Konwersje daty/godziny. IsDate Użyj funkcji , aby określić, czy można przekonwertować wartość na datę i godzinę.
CDate
rozpoznaje literały daty i literały godziny, ale nie wartości liczbowe. Aby przekonwertować wartość języka Visual Basic 6.0Date
naDate
wartość w visual basic 2005 lub nowszych wersjach, możesz użyć DateTime.FromOADate metody .Neutralne wartości daty/godziny. Typ danych daty zawsze zawiera zarówno informacje o dacie, jak i godzinie. Na potrzeby konwersji typu program Visual Basic uważa, że 1.1.0001 (1 stycznia 1 roku 1) ma być neutralną wartością daty i 00:00:00 (północ) jako neutralną wartość czasu. Jeśli przekonwertujesz
Date
wartość na ciąg,CStr
nie zawiera wartości neutralnych w wynikowym ciągu. Na przykład w przypadku konwersji#January 1, 0001 9:30:00#
na ciąg wynik to "9:30:00"; informacje o dacie są pomijane. Jednak informacje o dacie są nadal obecne w oryginalnejDate
wartości i można je odzyskać za pomocą funkcji, takich jak DatePart funkcja.Czułość kultury. Funkcje konwersji typów obejmujące ciągi wykonują konwersje na podstawie bieżących ustawień kultury aplikacji. Na przykład
CDate
rozpoznaje formaty dat zgodnie z ustawieniem ustawień regionalnych systemu. Musisz podać dzień, miesiąc i rok w prawidłowej kolejności ustawień regionalnych lub data może nie być interpretowana poprawnie. Format daty długiej nie jest rozpoznawany, jeśli zawiera ciąg dnia tygodnia, taki jak "środa".Jeśli musisz przekonwertować wartość na lub z ciągu reprezentującego wartość w formacie innym niż określony przez ustawienia regionalne, nie można użyć funkcji konwersji typów języka Visual Basic. W tym celu należy użyć
ToString(IFormatProvider)
metod iParse(String, IFormatProvider)
typu tej wartości. Na przykład użyj polecenia Double.Parse podczas konwertowania ciągu naDouble
, i użyj polecenia Double.ToString podczas konwertowania wartości typuDouble
na ciąg.
CType — Funkcja
Funkcja CType przyjmuje drugi argument, i coerces expression
do typename
, gdzie typename
może być dowolny typ danych, typename
struktura, klasa lub interfejs, do którego istnieje prawidłowa konwersja.
Aby zapoznać się z CType
porównaniem z innymi słowami kluczowymi konwersji typów, zobacz Operator directcast i TryCast Operator.
Przykład CBool
W poniższym przykładzie użyto funkcji do konwertowania CBool
wyrażeń na Boolean
wartości. Jeśli wyrażenie zwróci wartość niezerową, CBool
zwraca True
wartość ; w przeciwnym razie zwraca wartość 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)
Przykład CByte
W poniższym przykładzie użyto CByte
funkcji , aby przekonwertować wyrażenie na Byte
.
Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)
Przykład CChar
W poniższym przykładzie użyto CChar
funkcji , aby przekonwertować pierwszy znak String
wyrażenia na Char
typ.
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)
Argument wejściowy musi CChar
być typu Char
danych lub String
. Nie można użyć CChar
metody , aby przekonwertować liczbę na znak, ponieważ CChar
nie można zaakceptować typu danych liczbowych. Poniższy przykład uzyskuje liczbę reprezentującą punkt kodu (kod znaku) i konwertuje go na odpowiedni znak. Używa InputBox funkcji w celu uzyskania ciągu cyfr, CInt
aby przekonwertować ciąg na typ Integer
, i ChrW
przekonwertować liczbę na typ 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)
Przykład pliku CDate
W poniższym przykładzie użyto CDate
funkcji , aby przekonwertować ciągi na Date
wartości. Ogólnie rzecz biorąc, daty i godziny kodowania jako ciągi (jak pokazano w tym przykładzie) nie są zalecane. Zamiast tego użyj literałów daty i literałów godziny, takich jak #Feb 12, 1969# i #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)
Przykład pliku 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)
Przykład CDec
W poniższym przykładzie użyto CDec
funkcji , aby przekonwertować wartość liczbową na 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)
Przykład CInt
W poniższym przykładzie użyto CInt
funkcji , aby przekonwertować wartość na Integer
.
Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)
Przykład języka CLng
W poniższym przykładzie użyto CLng
funkcji , aby przekonwertować wartości na 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)
Przykład CObj
W poniższym przykładzie użyto CObj
funkcji , aby przekonwertować wartość liczbową na Object
. Sama zmienna Object
zawiera tylko cztero bajtowy wskaźnik, który wskazuje przypisaną Double
do niej wartość.
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)
Przykład CSByte
W poniższym przykładzie użyto CSByte
funkcji , aby przekonwertować wartość liczbową na SByte
.
Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)
Przykład CShort
W poniższym przykładzie użyto CShort
funkcji , aby przekonwertować wartość liczbową na Short
.
Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)
Przykład CSng
W poniższym przykładzie użyto CSng
funkcji , aby przekonwertować wartości na 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)
Przykład narzędzia CStr
W poniższym przykładzie użyto CStr
funkcji , aby przekonwertować wartość liczbową na 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)
W poniższym przykładzie użyto CStr
funkcji , aby przekonwertować Date
wartości na String
wartości.
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
zawsze renderuje Date
wartość w standardowym formacie krótkim dla bieżących ustawień regionalnych, na przykład "6/15/2003 4:35:47 PM". CStr
Jednak pomija neutralne wartości 1/1/0001 dla daty i 00:00:00 dla godziny.
Aby uzyskać więcej informacji na temat wartości zwracanych przez CStr
program , zobacz Zwracane wartości dla funkcji CStr.
Przykład CUInt
W poniższym przykładzie użyto CUInt
funkcji , aby przekonwertować wartość liczbową na UInteger
.
Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)
Przykład CULng
W poniższym przykładzie użyto CULng
funkcji , aby przekonwertować wartość liczbową na ULong
.
Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)
Przykład cuShort
W poniższym przykładzie użyto CUShort
funkcji , aby przekonwertować wartość liczbową na UShort
.
Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)