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 (CByteCShort, , , CIntCLngCSByte, , CUShort, ): CULngCUIntDoubleSingle

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.OverflowException

  • Części ułamkowe. Podczas konwertowania wartości nieintegralnej na typ całkowity funkcje konwersji liczb całkowitych (CByte, CInt, CShortCSByteCUIntCLngCULngi CUShort) 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 i CLng różnią się od Int funkcji i Fix , które obcinają, a nie zaokrąglają części ułamkowej liczby. Fix Ponadto i Int 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.0 Date na Date 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 oryginalnej Date 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 i Parse(String, IFormatProvider) typu tej wartości. Na przykład użyj polecenia Double.Parse podczas konwertowania ciągu na Double, i użyj polecenia Double.ToString podczas konwertowania wartości typu Double na ciąg.

CType — Funkcja

Funkcja CType przyjmuje drugi argument, i coerces expression do typename, gdzie typename może być dowolny typ danych, typenamestruktura, 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 Truewartość ; 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 CStrprogram , 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)

Zobacz też