Funkcje konwersji typu (Visual Basic)

Te funkcje są kompilowane w tekście, co oznacza, że kod konwersji jest częścią kodu, który oblicza wyrażenie. Czasami nie ma wywołania procedury w celu przeprowadzenia konwersji, co zwiększa wydajność. Każda funkcja coerce wyrażenie do określonego typu 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)

Część

expression
Wymagane. 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 numeryczne 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 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 usługi 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.94065645641246544E-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 skalowanych zero, czyli liczb bez miejsc dziesiętnych. W przypadku liczb z 28 miejscami dziesiętnymi zakres to +/-7.9228162514264375935439535035. Najmniejsza możliwa liczba niezerowa to 0,000000000000000000000000001 (+/-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 Visual Basic 15.8, Visual Basic optymalizuje wydajność konwersji zmiennoprzecinkowych na liczbę całkowitą za pomocą CInt funkcji. Aby uzyskać więcej informacji, zobacz sekcję Uwagi. Zobacz przykładową sekcję CInt Example (Przykład usługi 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 Visual Basic 15.8, Visual Basic optymalizuje wydajność zmiennoprzecinkowych do 64-bitowej konwersji liczb całkowitych za pomocą CLng funkcji. Aby uzyskać więcej informacji, zobacz sekcję Uwagi. Zobacz przykładową sekcję CInt Example (Przykład usługi 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 Visual Basic 15.8, Visual Basic optymalizuje wydajność zmiennoprzecinkowych na podpisaną konwersję bajtów za CSByte pomocą funkcji. Aby uzyskać więcej informacji, zobacz sekcję Uwagi. Zobacz przykładową sekcję CInt Example (Przykład usługi 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 Visual Basic 15.8, Visual Basic optymalizuje wydajność konwersji liczb zmiennoprzecinkowych na 16-bitową liczbę całkowitą za pomocą CShort funkcji. Aby uzyskać więcej informacji, zobacz sekcję Uwagi. Zobacz przykładową sekcję CInt Example (Przykład usługi 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 Typ danych ciągu Zwraca wartość dla wartości 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 Visual Basic 15.8, Visual Basic optymalizuje wydajność zmiennoprzecinkowe na niepodpisaną konwersję liczb całkowitych za pomocą CUInt funkcji. Aby uzyskać więcej informacji, zobacz sekcję Uwagi. Zobacz przykładową sekcję CInt Example (Przykład usługi 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 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 usługi 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 Visual Basic 15.8, Visual Basic optymalizuje wydajność zmiennoprzecinkowych na niepodpisaną 16-bitową konwersję całkowitą z funkcjąCUShort; zobacz sekcję Uwagi, aby uzyskać więcej informacji. Zobacz przykładową sekcję CInt Example (Przykład usługi CInt ).

1 Części ułamkowe mogą podlegać specjalnemu rodzajowi zaokrąglania nazywanego zaokrągleniami bankiera. Aby uzyskać więcej informacji, zobacz "Uwagi".

Uwagi

Zgodnie z regułą należy użyć funkcji konwersji typu Visual Basic w preferencjach do metod .NET Framework, takich jak ToString(), w Convert klasie lub w indywidualnej strukturze lub klasie typów. Funkcje Visual Basic są przeznaczone do optymalnej interakcji z kodem Visual Basic, a także sprawiają, że kod źródłowy jest krótszy i łatwiejszy do odczytania. Ponadto metody konwersji .NET Framework nie zawsze generują te same wyniki co funkcje 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 Visual Basic 15.8, wydajność konwersji zmiennoprzecinkowej na liczbę całkowitą jest zoptymalizowana podczas przekazywania Single wartości lub Double zwracanej przez następujące metody do jednej z funkcji konwersji całkowitej (CByte, CShort, CIntCLngCSByte, CUShort, CUInt), CULng):

Ta optymalizacja umożliwia uruchamianie kodu, który wykonuje dużą liczbę konwersji całkowitych, aby uruchomić maksymalnie dwa razy 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 typu 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ą.

  • Konwersje nieudane. expression Jeśli przekazany do funkcji znajduje się poza zakresem typu danych, do którego ma zostać przekonwertowany, OverflowException występuje.

  • Części ułamkowe. Podczas konwertowania wartości nieintegralnej na typ całkowity funkcje konwersji całkowitej (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 całkowitej zaokrąglają ją do najbliższej równej liczby całkowitej. Na przykład 0,5 rund do 0, a 1,5 i 2,5 obie rundy do 2. Jest to czasami nazywane zaokrąglanie bankiera, a jego celem jest zrekompensowanie stronniczości, które mogą 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 zwraca wartość tego samego typu danych co 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ść Visual Basic 6.0 Date na Date wartość w wersji Visual Basic 2005 lub nowszej, możesz użyć DateTime.FromOADate metody .

  • Neutralne wartości daty/godziny. Typ danych daty zawsze zawiera informacje o dacie i godzinie. Na potrzeby konwersji typów, Visual Basic uważa, że 1/1/0001 (1 stycznia roku 1) ma być neutralną wartością dla daty, a 00:00:00 (północ) jako wartość neutralną dla tego czasu. W przypadku konwertowania Date wartości na ciąg CStr nie uwzględnia 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 zostaną pominięte. Jednak informacje o dacie są nadal obecne w oryginalnej Date wartości i można je odzyskać za pomocą funkcji, takich jak DatePart funkcja.

  • Wrażliwość 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ć poprawnie interpretowana. 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 reprezentacji ciągu w formacie innym niż określona przez ustawienia regionalne, nie możesz użyć funkcji konwersji typów 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 Doublewartość , a następnie podczas Double.ToString 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 uzyskać porównanie CType 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 zwraca 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 CByte użyto 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 CChar użyto 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 CChar musi być typu Char danych lub String. Nie można CChar przekonwertować liczby 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 do 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 funkcji do konwertowania CDate ciągów 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. Użyj literałów daty i literałów godziny, takich jak #Feb 12, 1969# i #4:45:23 PM#, zamiast tego.

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 CDec użyto 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 CObj użyto funkcji , aby przekonwertować wartość liczbową na Object. Sama zmienna Object zawiera tylko wskaźnik czterech bajtów, który wskazuje na 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 CSByte użyto 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 CShort użyto 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 narzędzia 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 CStr

W poniższym przykładzie CStr użyto 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 CStrusługę , zobacz Zwracane wartości funkcji CStr.

Przykład cuInt

W poniższym przykładzie CUInt użyto 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 CULng użyto 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 CUShort użyto 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ż