Funkce pro převod typů (Visual Basic)

Tyto funkce jsou zkompilovány v textu, což znamená, že kód převodu je součástí kódu, který výraz vyhodnocuje. Někdy neexistuje volání procedury k provedení převodu, což zlepšuje výkon. Každá funkce převede výraz na konkrétní datový typ.

Syntaxe

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ý: Libovolný výraz zdrojového datového typu.

Datový typ návratové 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ý datový typ Rozsah argumentu expression
CBool Datový typ Boolean Libovolný platný Char nebo String číselný výraz
CByte Datový typ Byte Byte.MinValue (0) až Byte.MaxValue (255) (bez znaménka), desetinné části jsou zaokrouhleny.1

Počínaje jazykem Visual Basic 15.8 visual Basic optimalizuje výkon převodu s plovoucí desetinou čárkou na bajt pomocí CByte funkce. Další informace najdete v části Poznámky . Příklad najdete v části CInt Example .
CChar Datový typ Char Jakýkoli platný Char nebo String výraz; převede se pouze první znak; String hodnota může být 0 až 65535 (bez znaménka).
CDate Datový typ Date Jakékoli platné vyjádření data a času.
CDbl Datový typ Double -1,79769313486231570E+308 až -4,94065645841246544E-324 pro záporné hodnoty; 4.94065645841246544E-324 až 1,79769313486231570E+308 pro kladné hodnoty.
CDec Datový typ Decimal +/-79 228 162 514 264 337 593 543 950 335 pro čí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,000000000000000000000000000001 (+/-1E-28).
CInt Datový typ Integer Int32.MinValue (-2 147 483 648) až Int32.MaxValue (2 147 483 647); desetinné části jsou zaokrouhleny.1

Počínaje jazykem Visual Basic 15.8 visual Basic optimalizuje výkon převodu s plovoucí desetinou čárkou na celočíselnou konverzi pomocí CInt funkce. Další informace najdete v části Poznámky . Příklad najdete v části CInt Example .
CLng Datový typ Long Int64.MinValue (-9 223 372 036 854 775 808) až Int64.MaxValue (9 223 372 036 854 775 807); zlomkové části jsou zaokrouhleny.1

Počínaje jazykem Visual Basic 15.8 visual Basic optimalizuje výkon převodu s plovoucí desetinou čárkou na 64bitové celé číslo pomocí CLng funkce. Další informace najdete v části Poznámky . Příklad najdete v části CInt Example .
CObj Datový typ Object Libovolný platný výraz.
CSByte Datový typ SByte SByte.MinValue (-128) až SByte.MaxValue (127), desetinné části jsou zaokrouhleny.1

Počínaje jazykem Visual Basic 15.8 visual Basic optimalizuje výkon převodu bajtů s plovoucí desetinou čárkou pomocí CSByte funkce. Další informace najdete v části Poznámky . Příklad najdete v části CInt Example .
CShort Datový typ Short Int16.MinValue (-32 768) až Int16.MaxValue (32 767); desetinné části jsou zaokrouhleny.1

Počínaje jazykem Visual Basic 15.8 visual Basic optimalizuje výkon 16bitového celočíselného převodu CShort na 16bitové celé číslo. Další informace najdete v části Poznámky . Příklad najdete v části CInt Example .
CSng Datový typ Single -3,402823E+38 až -1,401298E-45 pro záporné hodnoty; 1.401298E-45 až 3,402823E+38 pro kladné hodnoty.
CStr Datový typ String Vrátí pro CStr závislosti na argumentu expression . Viz návratové hodnoty pro funkci CStr.
CUInt Datový typ UInteger UInt32.MinValue (0) až UInt32.MaxValue (4 294 967 295) (bez znaménka), desetinné části jsou zaokrouhleny.1

Počínaje jazykem Visual Basic 15.8 visual Basic optimalizuje výkon převodu celého čísla s plovoucí desetinou čárkou na bez znaménka pomocí CUInt funkce. Další informace najdete v části Poznámky . Příklad najdete v části CInt Example .
CULng Datový typ ULong UInt64.MinValue (0) až UInt64.MaxValue (18 446 744 073 709 551 615) (bez znaménka), desetinné části jsou zaokrouhleny.1

Počínaje jazykem Visual Basic 15.8 Visual Basic optimalizuje výkon dlouhého celočíselného převodu CULng bez znaménka na nepodepsané celé číslo. Další informace najdete v části Poznámky . Příklad najdete v části CInt Example .
CUShort Datový typ UShort UInt16.MinValue (0) až UInt16.MaxValue (65 535) (bez znaménka), desetinné části jsou zaokrouhleny.1

Počínaje jazykem Visual Basic 15.8 visual Basic optimalizuje výkon plovoucí desetiny na bez znaménka 16bitového celočíselného převodu CUShort pomocí funkce. Další informace najdete v části Poznámky . Příklad najdete v části CInt Example .

1 Zlomkové části mohou být předmětem speciálního typu zaokrouhlování nazývaného zaokrouhlování bankovního subjektu. Další informace najdete v části Poznámky.

Poznámky

Obecně platí, že byste měli použít funkce převodu typů jazyka Visual Basic v předvolbě k metodám rozhraní .NET Framework, jako ToString()je například , buď ve Convert třídě, nebo v samostatné struktuře typu nebo třídě. Funkce jazyka Visual Basic jsou navržené pro optimální interakci s kódem jazyka Visual Basic a také usnadňují čtení zdrojového kódu. Kromě toho metody převodu rozhraní .NET Framework ne vždy produkují stejné výsledky jako funkce jazyka 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 jazykem Visual Basic 15.8 je výkon převodu čísla s plovoucí deseti čárkou na celé číslo optimalizovaný, když předáte Single hodnotu nebo Double hodnotu vrácenou následujícími metodami do některé z celočíselné převodní funkce (CByte, CLngCIntCSByteCShort, CUShort, , CUInt), ): CULng

Tato optimalizace umožňuje kód, který provede velký počet celočíselových převodů tak, aby běžel až dvakrát rychleji. Následující příklad znázorňuje tyto optimalizované převody s plovoucí deseti čá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í

  • Nátlaku. Obecně platí, že pomocí funkcí převodu datových typů můžete výsledek operace převést na konkrétní datový typ, nikoli na výchozí datový typ. Můžete například použít CDec k vynucení aritmetické aritmetiky desetinných míst v případech, kdy se obvykle provádí aritmetika s jednoduchou přesností, dvojitou přesností nebo celočíselnou aritmetikou.

  • Neúspěšné převody expression Pokud je předaný funkci mimo rozsah datového typu, na který se má převést, OverflowException nastane.

  • Zlomkové části. Při převodu neintegrační hodnoty na celočíselný typ odebere funkce převodu celých čísel (CByte, CIntCLng, CSByte, CShort, CUInt, CULnga CUShort) desetinnou část a zaokrouhlí hodnotu na nejbližší celé číslo.

    Pokud je desetinná část přesně 0,5, funkce převodu celých čísel ho zaokrouhlí na nejbližší sudé celé číslo. Například 0,5 zaokrouhlí na 0 a 1,5 a 2,5 zaokrouhlí na 2. Někdy se tomu říká zaokrouhlování bankerů a jeho účelem je kompenzovat předsudky, které by se mohly nashromáždit při sčítání mnoha takových čísel dohromady.

    CInt a CLng liší se od IntFix funkcí, které zkracují místo zaokrouhlení zlomkové části čísla. Fix Také a Int vždy vrátit hodnotu stejného datového typu, který předáte.

  • Převody data a času IsDate Pomocí funkce určete, jestli je možné hodnotu převést na datum a čas. CDate rozpozná literály kalendářního data a časové literály, ale ne číselné hodnoty. Chcete-li převést hodnotu jazyka Visual Basic 6.0 Date na Date hodnotu v jazyce Visual Basic 2005 nebo novějších verzích, můžete použít metodu DateTime.FromOADate .

  • Neutrální hodnoty data a času Datový typ Datum vždy obsahuje informace o datu i čase. Pro účely převodu typů visual Basic považuje hodnotu 1/1/0001 (1. ledna roku 1) za neutrální hodnotu pro datum a 00:00:00 (půlnoc) jako neutrální hodnota pro čas. Pokud převedete Date hodnotu na řetězec, CStr neobsahuje do výsledného řetězce neutrální hodnoty. Pokud například převedete #January 1, 0001 9:30:00# na řetězec, výsledek je 9:30:00 AM; informace o datu se potlačí. Informace o datu se však stále nacházejí v původní Date hodnotě a lze je obnovit pomocí funkcí, jako DatePart je funkce.

  • Citlivost kultury. Funkce převodu typů zahrnující řetězce provádějí převody na základě aktuálního nastavení jazykové verze aplikace. Rozpoznává například CDate formáty kalendářních dat 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 národní prostředí nebo datum nemusí být interpretováno správně. Formát dlouhého data se nerozpozná, pokud obsahuje řetězec dne v týdnu, například "Středa".

    Pokud potřebujete převést na řetězcovou reprezentaci hodnoty v jiném formátu, než je formát určený vaším národním prostředím, nemůžete použít funkce převodu typů jazyka Visual Basic. Chcete-li to provést, použijte ToString(IFormatProvider) a Parse(String, IFormatProvider) metody tohoto typu hodnoty. Můžete například použít Double.Parse při převodu řetězce na Doubleřetězec a použít Double.ToString při převodu hodnoty typu Double na řetězec.

CType – funkce

Funkce CType přebírá druhý argument typenamea 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í s jinými klíčovými slovy převodu CType typů naleznete v tématu Operátor DirectCast a TryCast – operátor.

Příklad CBool

Následující příklad používá funkci k převodu CBool výrazů na Boolean hodnoty. Pokud se výraz vyhodnotí jako nenulová hodnota, CBool vrátí Truehodnotu ; v opačném případě 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 k převodu 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 Char na 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 CChar musí být datový typ Char nebo String. Číslo nelze převést CChar na znak, protože CChar nelze 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. Používá InputBox funkci k získání řetězce číslic, CInt k převodu řetězce na typ Integera ChrW k převodu čísla 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

Následující příklad používá funkci k převodu CDate řetězců na Date hodnoty. Obecně se nedoporučuje pevně kódovat data a časy jako řetězce (jak je znázorněno v tomto příkladu). Používejte literály kalendářních dat a časové literály, například #Feb 12, 1969# a #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)

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 k převodu 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

Následující příklad používá CLng funkci k převodu 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. Samotná Object proměnná obsahuje pouze čtyřbajtů ukazatel, který odkazuje na hodnotu přiřazenou Double k ní.

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

Následující příklad používá CSng funkci k převodu 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á funkci k převodu CStrDate 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 "15. 6. 2003 4:35:47 PM". Nicméně potlačí CStrneutrální hodnoty 1/1/0001 pro datum a 00:00:00 pro čas.

Další podrobnosti o hodnotách vrácených CStrfunkcí naleznete 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)

Viz také