Funkce pro převod typů (Visual Basic)
Tyto funkce jsou kompilovány vložené, což znamená, že kód převodu je součástí kódu, který vyhodnocuje výraz. Někdy neexistuje žádné volání procedury k provedení převodu, což zvyšuje výkon. Každá funkce převede výraz na konkrétní datový typ.
Syntax
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)
Část
expression
Povinná hodnota. Libovolný výraz zdrojového datového typu.
Datový typ vrácené hodnoty
Název funkce určuje datový typ hodnoty, kterou vrátí, jak je znázorněno v následující tabulce.
| Název funkce | Návratový typ dat | Rozsah expression argumentu |
|---|---|---|
CBool |
Boolean – datový typ | Libovolný platný Char nebo String číselný výraz. |
CByte |
Byte – datový typ | Byte.MinValue (0) až Byte.MaxValue (255) (bez znaménka); zlomkové části jsou zaokrouhleny. 1 počínaje Visual Basic 15,8 Visual Basic optimalizuje výkon plovoucí desetinné čárky na převod pomocí CByte funkce. další informace naleznete v části poznámky . Příklad najdete v části s Příklady CInt . |
CChar |
Char – datový typ | Libovolný platný Char String výraz nebo; pouze první znak String je převeden; hodnota může být 0 až 65535 (bez znaménka). |
CDate |
Date – datový typ | Jakákoli platná reprezentace data a času. |
CDbl |
Double – datový typ | -1.79769313486231570 e + 308 do-4.94065645841246544 E-324 pro záporné hodnoty; 4.94065645841246544 e-324 až 1.79769313486231570 E + 308 pro kladné hodnoty. |
CDec |
Decimal – datový typ | +/-79,228,162,514,264,337,593,543,950,335 pro čísla s nulovou škálou, tj. čísla bez desetinných míst. Pro čísla s 28 desetinnými místy je rozsah +/-7.9228162514264337593543950335. Nejmenší možné nenulové číslo je 0,0000000000000000000000000001 (+/-1E-28). |
CInt |
Integer – datový typ | Int32.MinValue (-2 147 483 648) až Int32.MaxValue (2 147 483 647); zlomkové části se zaokrouhlují. 1 počínaje Visual Basic 15,8 Visual Basic optimalizuje výkon konverze s plovoucí desetinnou čárkou pomocí CInt funkce. další informace naleznete v části poznámky . Příklad najdete v části s Příklady CInt . |
CLng |
Long – datový typ | Int64.MinValue (-9223372036854775808) až Int64.MaxValue (9 223 372 036 854 775 807); zlomkové části jsou zaokrouhleny. 1 počínaje Visual Basic 15,8 Visual Basic optimalizuje výkon konverze s plovoucí desetinnou čárkou na 64 pomocí CLng funkce. další informace naleznete v části poznámky . Příklad najdete v části s Příklady CInt . |
CObj |
Datový typ objektu | Libovolný platný výraz |
CSByte |
SByte – datový typ | SByte.MinValue (-128) až SByte.MaxValue (127); zlomkové části se zaokrouhlují. 1 počínaje Visual Basic 15,8 Visual Basic optimalizuje výkon plovoucí desetinné čárky na předepsanou bajtů s CSByte funkcí; další informace naleznete v části poznámky . Příklad najdete v části s Příklady CInt . |
CShort |
Short – datový typ | Int16.MinValue (-32 768) až Int16.MaxValue (32 767); zlomkové části se zaokrouhlují. 1 počínaje Visual Basic 15,8 Visual Basic optimalizuje výkon plovoucí desetinné čárky na 16bitový celočíselný převod pomocí CShort funkce; další informace naleznete v části poznámky . Příklad najdete v části s Příklady CInt . |
CSng |
Single – datový typ | -3.402823 e + + 38 do-1.401298 E-45 pro záporné hodnoty; 1.401298 e-45 až 3.402823 E + 38 pro kladné hodnoty. |
CStr |
Datový typ String | Vrátí pro CStr záviset na expression argumentu. Viz návratové hodnoty pro funkci CStr. |
CUInt |
UInteger – datový typ | UInt32.MinValue (0) až UInt32.MaxValue (4 294 967 295) (bez znaménka); zlomkové části jsou zaokrouhleny. 1 počínaje Visual Basic 15,8 Visual Basic optimalizuje výkon plovoucí desetinné čárky na unsigned integer konverzi s CUInt funkcí; další informace naleznete v části poznámky . Příklad najdete v části s Příklady CInt . |
CULng |
ULong – datový typ | UInt64.MinValue (0) až UInt64.MaxValue (18446744073709551615) (bez znaménka); zlomkové části jsou zaokrouhleny. 1 počínaje Visual Basic 15,8 Visual Basic optimalizuje výkon plovoucí desetinné čárky na nepodepsaný dlouhý převod celého čísla s CULng funkcí; další informace naleznete v části poznámky . Příklad najdete v části s Příklady CInt . |
CUShort |
UShort – datový typ | UInt16.MinValue (0) až UInt16.MaxValue (65 535) (bez znaménka); zlomkové části jsou zaokrouhleny. 1 počínaje Visual Basic 15,8 Visual Basic optimalizuje výkon plovoucí desetinné čárky na nepodepsaný 16bitový celočíselný převod s CUShort funkcí; další informace naleznete v části poznámky . Příklad najdete v části s Příklady CInt . |
1 zlomkové části mohou být předmětem zvláštního typu zaokrouhlení s názvem zaokrouhlování bank. Další informace najdete v části "poznámky".
Poznámky
jako pravidlo byste měli použít funkce pro převod typu Visual Basic v předvolbách pro metody .NET Framework, jako je například ToString() , buď na Convert třídu, nebo na samostatné struktuře typu nebo třídě. funkce Visual Basic jsou navržené pro optimální interakci s kódem Visual Basic a zároveň usnadňují čtení zdrojového kódu. kromě toho metody převodu .NET Framework nevytváří vždy stejné výsledky jako funkce Visual Basic, například při převodu Boolean na Integer . Další informace najdete v tématu řešení potíží s datovými typy.
počínaje Visual Basic 15,8 se výkon konverze s plovoucí desetinnou čárkou na celé číslo optimalizuje, když předáte Single hodnotu nebo Double vrácenou následujícími metodami do jedné z funkcí konverze celého čísla ( CByte , CShort , CInt , CLng , CSByte , CUShort , CUInt , CULng ):
- 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)
Tato optimalizace umožňuje kódu, který provede velký počet převodů celých čísel, aby běžel dvakrát jako rychlý. Následující příklad znázorňuje tyto optimalizované převody s plovoucí desetinnou čárkou na celé číslo:
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
Chování
Konverze za. Obecně můžete použít funkce pro převod datového typu k převedení výsledku operace na určitý datový typ, nikoli na výchozí datový typ. Například použijte
CDeck vynucení desítkové aritmetické operace v případech, kde by normálně probíhat jednoduchá přesnost, dvojitá přesnost nebo aritmetická celočíselná hodnota.Převody se nezdařily. Pokud
expressionje předaná funkce mimo rozsah datového typu, na který má být převeden, OverflowException dojde k chybě.Zlomkové části. Když převedete neceločíselnou hodnotu na celočíselný typ, funkce převodu celého čísla (
CByte,CInt,CLng,CSByte,CShort,CUInt,CULng, aCUShort) odstraní zlomkovou část a zaokrouhlí hodnotu na nejbližší celé číslo.Pokud je Zlomková část přesně 0,5, funkce pro převod celého čísla zaokrouhlí na nejbližší sudé celé číslo. Například 0,5 se zaokrouhlí na 0 a 1,5 a 2,5 se zaokrouhlí na 2. Tento postup se někdy označuje jako zaokrouhlování bank a jeho účelem je kompenzovat posun, který by se mohl nashromáždit při přidávání mnoha takových čísel dohromady.
CIntaCLngliší se od Int Fix funkcí a, které se zkrátí, spíše než zaokrouhlit, zlomkovou část čísla. TakéFixaIntvždy vracet hodnotu stejného datového typu jako při předání.Převody data a času. IsDateFunkci lze použít k určení, zda je možné hodnotu převést na datum a čas.
CDaterozpoznává literály data a časové literály, ale ne číselné hodnoty. chcete-li převést hodnotu Visual Basic 6,0DatenaDatehodnotu v Visual Basic 2005 nebo novějších verzích, lze použít DateTime.FromOADate metodu.Neutrální hodnoty data a času. Datový typ datum vždy obsahuje informace o datu a čase. pro účely konverze typu Visual Basic považuje 1/1/0001 (1. ledna of year) za neutrální hodnotu pro datum a 00:00:00 (půlnoc) jako neutrální hodnotu pro čas. Převedete-li
Datehodnotu na řetězec,CStrnezahrnuje neutrální hodnoty ve výsledném řetězci. Například Pokud převedete#January 1, 0001 9:30:00#na řetězec, výsledkem je "9:30:00 dop.", informace o datu jsou potlačeny. Informace o datu jsou však stále přítomny v původníDatehodnotě a lze je obnovit pomocí funkcí, jako je DatePart funkce.Citlivostní jazyková verze. Funkce pro převod typů zahrnující řetězce provádějí převody na základě aktuálního nastavení jazykové verze aplikace. Například
CDaterozpoznává formáty data podle nastavení národního prostředí systému. Je nutné zadat den, měsíc a rok ve správném pořadí pro vaše národní prostředí nebo datum nemusí být interpretováno správně. Formát dlouhého data není rozpoznán, pokud obsahuje řetězec dne v týdnu, například "Středa".pokud potřebujete převést na nebo z řetězcové reprezentace hodnoty v jiném formátu, než který je určen národním prostředím, nemůžete použít funkce pro převod typu Visual Basic. K tomu použijte
ToString(IFormatProvider)metody a tohotoParse(String, IFormatProvider)typu hodnoty. Například použijte Double.Parse při převodu řetězce na aDoublepoužít Double.ToString při převodu hodnoty typuDoublena řetězec.
CType – funkce
Funkce CType přebírá druhý argument, typename a převede expression na typename , kde typename může být libovolný datový typ, struktura, třída nebo rozhraní, na které existuje platný převod.
Porovnání CType s jinými klíčovými slovy pro převod typů naleznete v tématu operátor DirectCast a operátor TryCast.
Příklad CBool
Následující příklad používá CBool funkci k převodu výrazů na Boolean hodnoty. Pokud je výraz vyhodnocen jako nenulová hodnota, CBool vrátí True , jinak vrátí 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)
Příklad CByte
Následující příklad používá CByte funkci pro převod výrazu 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)
Příklad CChar
Následující příklad používá CChar funkci k převodu prvního znaku String výrazu 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)
Vstupní argument pro CChar musí být datového typu Char nebo String . Nelze použít CChar k převedení čísla na znak, protože CChar nemůže přijmout číselný datový typ. Následující příklad získá číslo představující bod kódu (kód znaku) a převede ho na odpovídající znak. Pomocí InputBox funkce získá řetězec číslic, CInt převede řetězec na typ Integer a ChrW převede číslo 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)
Příklad CDate
V následujícím příkladu je použita CDate funkce pro převod řetězců na Date hodnoty. Obecně se nedoporučuje používat data a časy pevně zakódování jako řetězce (jak je znázorněno v tomto příkladu). Použijte literály data a časová literály, například #Feb 12, 1969 # a #4:45:23 PM #, místo toho.
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)
Příklad 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)
Příklad CDec
Následující příklad používá CDec funkci k převodu číselné hodnoty 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)
Příklad CInt
Následující příklad používá CInt funkci pro převod hodnoty 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)
Příklad CLng
V následujícím příkladu je použita CLng funkce pro převod hodnot 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)
Příklad CObj
Následující příklad používá CObj funkci k převodu číselné hodnoty na Object . ObjectProměnná sama obsahuje pouze ukazatel se čtyřmi bajty, který odkazuje na hodnotu, která Double je k ní přiřazena.
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)
Příklad CSByte
Následující příklad používá CSByte funkci k převodu číselné hodnoty 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)
Příklad CShort
Následující příklad používá CShort funkci k převodu číselné hodnoty na Short .
Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)
Příklad CSng
V následujícím příkladu je použita CSng funkce pro převod hodnot 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)
Příklad CStr
Následující příklad používá CStr funkci k převodu číselné hodnoty 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)
Následující příklad používá CStr funkci pro převod Date hodnot na String hodnoty.
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 vždy vykreslí Date hodnotu ve standardním krátkém formátu pro aktuální národní prostředí, například "6/15/2003 4:35:47 PM". Potlačí ale CStr neutrální hodnoty 1/1/0001 pro datum a 00:00:00 pro čas.
Další informace o hodnotách vrácených v naleznete CStr v tématu návratové hodnoty pro funkci CStr.
Příklad CUInt
Následující příklad používá CUInt funkci k převodu číselné hodnoty 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)
Příklad CULng
Následující příklad používá CULng funkci k převodu číselné hodnoty 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)
Příklad CUShort
Následující příklad používá CUShort funkci k převodu číselné hodnoty 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)