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
, CLng
CInt
CSByte
CShort
, 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ó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
,CInt
CLng
,CSByte
,CShort
,CUInt
,CULng
aCUShort
) 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
aCLng
liší se od IntFix funkcí, které zkracují místo zaokrouhlení zlomkové části čísla.Fix
Také aInt
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.0Date
naDate
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)
aParse(String, IFormatProvider)
metody tohoto typu hodnoty. Můžete například použít Double.Parse při převodu řetězce naDouble
řetězec a použít Double.ToString při převodu hodnoty typuDouble
na ř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í 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í True
hodnotu ; 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 Integer
a 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 CStr
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 "15. 6. 2003 4:35:47 PM". Nicméně potlačí CStr
neutrální hodnoty 1/1/0001 pro datum a 00:00:00 pro čas.
Další podrobnosti o hodnotách vrácených CStr
funkcí 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)