Typkonverteringsfunktioner (Visual Basic)
Dessa funktioner kompileras infogat, vilket innebär att konverteringskoden är en del av koden som utvärderar uttrycket. Ibland finns det inget anrop till en procedur för att utföra konverteringen, vilket förbättrar prestandan. Varje funktion tvingar ett uttryck till en specifik datatyp.
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)
Delvis
expression
Obligatoriska. Alla uttryck för källdatatypen.
Returnera värdedatatyp
Funktionsnamnet avgör datatypen för det värde som returneras, enligt följande tabell.
Funktionsnamn | Returnera datatyp | Intervall för expression argument |
---|---|---|
CBool |
Boolesk datatyp | Char Giltiga eller String numeriska uttryck. |
CByte |
Bytedatatyp | Byte.MinValue (0) till och med Byte.MaxValue (255) (osignerade); bråkdelar avrundas.1 Från och med Visual Basic 15.8 optimerar Visual Basic prestanda för konvertering av flyttal till byte med CByte funktionen. Mer information finns i avsnittet Kommentarer . Se avsnittet CInt-exempel för ett exempel. |
CChar |
Teckendatatyp | Valfritt giltigt Char eller String uttryck; endast första tecknet i ett String konverteras. Värdet kan vara 0 till 65535 (osignerat). |
CDate |
Datumdatatyp | En giltig representation av ett datum och en tid. |
CDbl |
Dubbel datatyp | -1.79769313486231570E+308 till -4.94065645841246544E-324 för negativa värden; 4.94065645841246544E-324 till 1.79769313486231570E+308 för positiva värden. |
CDec |
Decimaldatatyp | +/-79 228 162 514 264 337 593 543 950 335 för nollskalade tal, dvs. tal utan decimaler. För tal med 28 decimaler är intervallet +/-7,9228162514264337593543950335. Det minsta möjliga talet som inte är noll är 0,0000000000000000000000000000001 (+/-1E-28). |
CInt |
Heltalsdatatyp | Int32.MinValue (-2 147 483 648) till och med Int32.MaxValue (2 147 483 647); bråkdelar avrundas.1 Från och med Visual Basic 15.8 optimerar Visual Basic prestanda för konvertering av flyttal till heltal med CInt funktionen. Mer information finns i avsnittet Anmärkningar . Se avsnittet CInt-exempel för ett exempel. |
CLng |
Lång datatyp | Int64.MinValue (-9 223 372 036 854 775 808) till Int64.MaxValue och med (9 223 372 036 854 775 807); bråkdelar avrundas.1 Från och med Visual Basic 15.8 optimerar Visual Basic prestanda för konvertering av flyttal till 64-bitars heltal med CLng funktionen. Mer information finns i avsnittet Anmärkningar . Se avsnittet CInt-exempel för ett exempel. |
CObj |
Objektdatatyp | Valfritt giltigt uttryck. |
CSByte |
Datatyp för SByte | SByte.MinValue (-128) till och med SByte.MaxValue (127); bråkdelar avrundas.1 Från och med Visual Basic 15.8 optimerar Visual Basic prestanda för flyttal till signerad bytekonvertering med CSByte funktionen. Mer information finns i avsnittet Anmärkningar . Se avsnittet CInt-exempel för ett exempel. |
CShort |
Kort datatyp | Int16.MinValue (-32 768) till och med Int16.MaxValue (32 767); bråkdelar avrundas.1 Från och med Visual Basic 15.8 optimerar Visual Basic prestanda för konvertering av flyttal till 16-bitars heltal med CShort funktionen. Mer information finns i avsnittet Anmärkningar . Se avsnittet CInt-exempel för ett exempel. |
CSng |
Enskild datatyp | -3.402823E+38 till -1.401298E-45 för negativa värden; 1.401298E-45 till 3.402823E+38 för positiva värden. |
CStr |
Strängdatatyp | Returnerar för CStr beror på expression argumentet. Se Returnera värden för CStr-funktionen. |
CUInt |
UInteger-datatyp | UInt32.MinValue (0) till och med UInt32.MaxValue (4 294 967 295) (osignerade); bråkdelar avrundas.1 Från och med Visual Basic 15.8 optimerar Visual Basic prestanda för flyttalskonvertering till osignerad heltalskonvertering med CUInt funktionen. Mer information finns i avsnittet Anmärkningar . Se avsnittet CInt-exempel för ett exempel. |
CULng |
ULong-datatyp | UInt64.MinValue (0) till och med UInt64.MaxValue (18 446 744 073 709 551 615) (osignerade); bråkdelar avrundas.1 Från och med Visual Basic 15.8 optimerar Visual Basic prestanda för flyttal till osignerad lång heltalskonvertering med CULng funktionen. Mer information finns i avsnittet Anmärkningar . Se avsnittet CInt-exempel för ett exempel. |
CUShort |
UShort-datatyp | UInt16.MinValue (0) till och med UInt16.MaxValue (65 535) (osignerade); bråkdelar avrundas.1 Från och med Visual Basic 15.8 optimerar Visual Basic prestanda för flyttal till osignerad 16-bitars heltalskonvertering med CUShort funktionen. Mer information finns i avsnittet Anmärkningar . Se avsnittet CInt-exempel för ett exempel. |
1 Bråkdelar kan omfattas av en särskild typ av avrundning som kallas bankirs avrundning. Mer information finns i "Kommentarer".
Kommentarer
Som regel bör du använda visual basic-typkonverteringsfunktionerna i stället för .NET Framework-metoderna, till exempel ToString()
, antingen i Convert klassen eller på en enskild typstruktur eller klass. Visual Basic-funktionerna är utformade för optimal interaktion med Visual Basic-kod, och de gör även källkoden kortare och enklare att läsa. Dessutom ger .NET Framework-konverteringsmetoderna inte alltid samma resultat som Visual Basic-funktionerna, till exempel vid konvertering Boolean
till Integer
. Mer information finns i Felsöka datatyper.
Från och med Visual Basic 15.8 optimeras prestanda för konvertering från flyttal till heltal när du skickar SingleDouble eller-värdet som returneras med följande metoder till någon av heltalskonverteringsfunktionerna (CByte
, , CInt
CShort
, 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)
Den här optimeringen gör att kod som utför ett stort antal heltalskonverteringar kan köras upp till dubbelt så snabbt. I följande exempel visas dessa optimerade konverteringar från flyttalspunkt till heltal:
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
Funktionssätt
Tvång. I allmänhet kan du använda datatypkonverteringsfunktionerna för att tvinga resultatet av en åtgärd till en viss datatyp i stället för standarddatatypen. Använd till exempel
CDec
för att framtvinga decimalaritmetik i fall där enprecision, dubbel precision eller heltalsaritmetik normalt skulle ske.Misslyckade konverteringar. Om den
expression
som skickas till funktionen ligger utanför intervallet för den datatyp som den ska konverteras till, inträffar en OverflowException .Bråkdelar. När du konverterar ett icke-integralt värde till en integraltyp tar heltalskonverteringsfunktionerna (
CByte
, ,CInt
CSByte
CLng
,CShort
,CUInt
,CULng
ochCUShort
) bort bråkdelen och avrundar värdet till närmaste heltal.Om bråkdelen är exakt 0,5 kan heltalskonverteringsfunktionerna avrunda den till närmaste jämna heltal. Till exempel avrundar 0,5 till 0 och 1,5 och 2,5 båda avrundar till 2. Detta kallas ibland bankirens avrundning, och dess syfte är att kompensera för en bias som kan ackumuleras när man lägger till många sådana siffror tillsammans.
CInt
ochCLng
skiljer sig från Int funktionerna och Fix , som trunkerar, snarare än runda, bråkdelen av ett tal.Fix
Int
Och returnerar alltid ett värde av samma datatyp som du skickar in.Datum-/tidskonverteringar. IsDate Använd funktionen för att avgöra om ett värde kan konverteras till ett datum och en tid.
CDate
identifierar datumliteraler och tidsliteraler men inte numeriska värden. Om du vill konvertera ett Visual Basic 6.0-värdeDate
till ettDate
värde i Visual Basic 2005 eller senare versioner kan du använda DateTime.FromOADate metoden.Neutrala datum-/tidsvärden. Datumdatatypen innehåller alltid både datum- och tidsinformation. För typkonvertering anser Visual Basic att 1/1/0001 (1 januari år 1) är ett neutralt värde för datumet och 00:00:00 (midnatt) som ett neutralt värde för tiden. Om du konverterar ett
Date
värde till en strängCStr
innehåller inte neutrala värden i den resulterande strängen. Om du till exempel konverterar#January 1, 0001 9:30:00#
till en sträng blir resultatet "9:30:00 AM". Datuminformationen ignoreras. Datuminformationen finns dock fortfarande i det ursprungligaDate
värdet och kan återställas med funktioner som DatePart funktion.Kulturkänslighet. Typkonverteringsfunktionerna som involverar strängar utför konverteringar baserat på de aktuella kulturinställningarna för programmet. Till exempel
CDate
identifierar datumformat enligt inställningen för nationella inställningar i systemet. Du måste ange dag, månad och år i rätt ordning för dina nationella inställningar, annars kanske datumet inte tolkas korrekt. Ett långt datumformat identifieras inte om det innehåller en veckodagsträng, till exempel "Onsdag".Om du behöver konvertera till eller från en strängrepresentation av ett värde i ett annat format än det som anges av språkvarianten kan du inte använda konverteringsfunktionerna för Visual Basic-typen. Det gör du genom att använda
ToString(IFormatProvider)
metoderna ochParse(String, IFormatProvider)
för värdets typ. Du kan till exempel använda Double.Parse när du konverterar en sträng till enDouble
och använder Double.ToString när du konverterar ett värde av typenDouble
till en sträng.
CType-funktion
CType-funktionen tar ett andra argument, typename
, och tvingar expression
till typename
, där typename
kan vara vilken datatyp, struktur, klass eller gränssnitt som det finns en giltig konvertering till.
En jämförelse av CType
med andra typkonverteringsnyckelord finns i DirectCast-operatorn och TryCast-operatorn.
CBool-exempel
I följande exempel används CBool
funktionen för att konvertera uttryck till Boolean
värden. Om ett uttryck utvärderas till ett värde som inte är noll CBool
returnerar True
. Annars returneras 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)
Exempel på CByte
I följande exempel används CByte
funktionen för att konvertera ett uttryck till en Byte
.
Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)
CChar-exempel
I följande exempel används CChar
funktionen för att konvertera det första tecknet i ett String
uttryck till en 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)
Indataargumentet måste CChar
vara av datatyp Char
eller String
. Du kan inte använda CChar
för att konvertera ett tal till ett tecken eftersom CChar
det inte går att acceptera en numerisk datatyp. I följande exempel hämtas ett tal som representerar en kodpunkt (teckenkod) och konverterar den till motsvarande tecken. Den använder InputBox funktionen för att hämta strängen med siffror, CInt
konvertera strängen till att skriva Integer
och ChrW
konvertera talet till att skriva 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)
CDate-exempel
I följande exempel används CDate
funktionen för att konvertera strängar till Date
värden. I allmänhet rekommenderas inte hårdkodning av datum och tider som strängar (som visas i det här exemplet). Använd datumliteraler och tidsliteraler, till exempel #Feb 12, 1969# och #4:45:23 PM#, i stället.
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)
CDbl-exempel
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)
CDec-exempel
I följande exempel används CDec
funktionen för att konvertera ett numeriskt värde till 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)
CInt-exempel
I följande exempel används CInt
funktionen för att konvertera ett värde till Integer
.
Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)
CLng-exempel
I följande exempel används CLng
funktionen för att konvertera värden till 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)
CObj-exempel
I följande exempel används CObj
funktionen för att konvertera ett numeriskt värde till Object
. Själva Object
variabeln innehåller bara en pekare på fyra byte som pekar på det Double
tilldelade värdet.
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)
CSByte-exempel
I följande exempel används CSByte
funktionen för att konvertera ett numeriskt värde till SByte
.
Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)
CShort-exempel
I följande exempel används CShort
funktionen för att konvertera ett numeriskt värde till Short
.
Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)
CSng-exempel
I följande exempel används CSng
funktionen för att konvertera värden till 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)
CStr-exempel
I följande exempel används CStr
funktionen för att konvertera ett numeriskt värde till 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)
I följande exempel används CStr
funktionen för att konvertera Date
värden till String
värden.
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
renderar alltid ett Date
värde i standardformatet för det aktuella språket, till exempel "2003-06-15 16:35:47". Undertrycker dock CStr
de neutrala värdena 1/1/0001 för datumet och 00:00:00 för tiden.
Mer information om de värden som returneras av CStr
finns i Returnera värden för CStr-funktionen.
CUInt-exempel
I följande exempel används CUInt
funktionen för att konvertera ett numeriskt värde till UInteger
.
Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)
CULng-exempel
I följande exempel används CULng
funktionen för att konvertera ett numeriskt värde till ULong
.
Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)
CUShort-exempel
I följande exempel används CUShort
funktionen för att konvertera ett numeriskt värde till UShort
.
Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)