Funzioni di conversione del tipo
Aggiornamento: novembre 2007
Queste funzioni vengono compilate inline, ossia il codice di conversione fa parte del codice con cui viene valutata l'espressione. Talvolta non sono presenti chiamate a una routine per effettuare la conversione e questo contribuisce al miglioramento delle prestazioni. Ciascuna funzione consente la conversione di un'espressione in un tipo di dati specifico.
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)
Parte
- expression
Obbligatoria. Qualsiasi espressione del tipo di dati di origine.
Tipo di dati del valore restituito
Il nome della funzione determina il tipo di dati del valore restituito, come illustrato nella tabella riportata di seguito.
Nome funzione |
Tipo di dati restituito |
Intervallo per l'argomento expression |
---|---|---|
CBool |
Qualsiasi espressione Char, String o numerica valida. |
|
CByte |
Da 0 a 255 (senza segno). Le parti frazionarie vengono arrotondate.1 |
|
CChar |
Qualsiasi espressione Char o String valida. Viene convertito solo il primo carattere di un'espressione String. Il valore può essere compreso tra 0 e 65.535 (senza segno). |
|
CDate |
Qualsiasi rappresentazione valida di data e ora. |
|
CDbl |
Da -1,79769313486231570E+308 a -4,94065645841246544E-324 per valori negativi; da 4,94065645841246544E-324 a 1,79769313486231570E+308 per valori positivi. |
|
CDec |
+/-79.228.162.514.264.337.593.543.950.335 per numeri con fattore di divisione zero, ossia numeri senza decimali. Per numeri con 28 posizioni decimali, l'intervallo è +/-7,9228162514264337593543950335. Il numero più basso possibile diverso da zero è 0,0000000000000000000000000001 (+/-1E-28). |
|
CInt |
Da -2.147.483.648 a 2.147.483.647. Le parti frazionarie vengono arrotondate.1 |
|
CLng |
Da -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Le parti frazionarie vengono arrotondate.1 |
|
CObj |
Qualsiasi espressione valida. |
|
CSByte |
Da -128 a 127. Le parti frazionarie vengono arrotondate.1 |
|
CShort |
Da -32.768 a 32.767. Le parti frazionarie vengono arrotondate.1 |
|
CSng |
Da -3,402823E+38 a -1,401298E-45 per valori negativi; da 1,401298E-45 a 3,402823E+38 per valori positivi. |
|
CStr |
I valori restituiti da CStr variano in base all'argomento expression. Per informazioni, vedere Valori restituiti dalla funzione CStr. |
|
CUInt |
Da 0 a 4.294.967.295 (senza segno). Le parti frazionarie vengono arrotondate.1 |
|
CULng |
Da 0 a 18.446.744.073.709.551.615 (senza segno). Le parti frazionarie vengono arrotondate.1 |
|
CUShort |
Da 0 a 65.535 (senza segno). Le parti frazionarie vengono arrotondate.1 |
1 Alle parti frazionarie può essere applicato uno speciale tipo di arrotondamento. Per ulteriori informazioni, vedere la sezione relativa alle osservazioni.
Note
Di norma si consiglia di utilizzare le funzioni di conversione dei tipi di Visual Basic anziché i metodi .NET Framework, ad esempio ToString(), sulla classe Convert oppure su una singola classe o struttura di tipi. Le funzioni di Visual Basic sono state appositamente progettate per l'interazione ottimale con il codice Visual Basic e contribuiscono a rendere il codice sorgente più breve e più facilmente leggibile. Inoltre, i metodi di conversione .NET Framework non producono sempre gli stessi risultati delle funzioni di Visual Basic, ad esempio quando vengono convertiti valori Boolean in Integer. Per ulteriori informazioni, vedere Risoluzione dei problemi relativi ai tipi di dati.
Comportamento
Coercizione. In generale, è possibile utilizzare le funzioni di conversione dei tipi di dati per assegnare il risultato di un'operazione a uno specifico tipo di dati anziché al tipo predefinito. È possibile, ad esempio, utilizzare CDec per eseguire operazioni aritmetiche su valori decimali nei casi in cui in genere si effettuano operazioni a precisione singola, a precisione doppia o con valori integer.
Conversioni non riuscite. Se il valore expression passato alla funzione non è compreso nell'intervallo del tipo di dati in cui viene convertito, verrà generata un'eccezione OverflowException.
Parti frazionarie. Quando si converte un valore non integrale in un tipo integrale, le funzioni di conversione dei valori integer (CByte, CInt, CLng, CSByte, CShort, CUInt, CULng e CUShort) rimuovono la parte frazionaria e arrotondano il valore all'integer più vicino.
Se la parte frazionaria corrisponde esattamente a 0,5, le funzioni di conversione dei valori integer la arrotondano al valore integer pari più vicino. 0,5 viene ad esempio arrotondato a 0, mentre 1,5 e 2,5 vengono entrambi arrotondati a 2. Questo arrotondamento ha lo scopo di compensare la distorsione che potrebbe accumularsi quando si aggiungono molti numeri di questo tipo.
CInt e CLng sono diversi dalle Funzioni Int e Fix (Visual Basic), che troncano la parte frazionaria di un numero anziché arrotondarla. Le funzioni Fix e Int, inoltre, restituiscono sempre un valore dello stesso tipo di quello passato.
Conversioni di data/ora. Utilizzare la Funzione IsDate (Visual Basic) per determinare se è possibile convertire un valore in una data e un'ora specifiche. CDate riconosce i valori letterali di data e ora, ma non quelli numerici. Per convertire un valore Date di Visual Basic 6.0 in un valore Date di Visual Basic 2005 o versioni successive, è possibile utilizzare il metodo DateTime.FromOADate.
Valori di data/ora neutri. Il Tipo di dati Date (Visual Basic) contiene sempre informazioni sia sulla data che sull'ora. Ai fini della conversione del tipo, Visual Basic considera 1/1/0001 (1 gennaio dell'anno 1) come valore neutro per la data e 00:00:00 (mezzanotte) come valore neutro per l'ora. Se si converte un valore Date in una stringa, CStr non include i valori neutri nella stringa risultante. Se ad esempio il valore #January 1, 0001 9:30:00# viene convertito in una stringa, il risultato sarà "9:30:00 AM" e le informazioni sulla data non verranno visualizzate. Le informazioni sulla data sono comunque incluse nel valore Date originale e possono essere recuperate con funzioni specifiche, ad esempio la Funzione DatePart (Visual Basic).
Sensibilità alle impostazioni cultura. Le funzioni di conversione dei tipi che riguardano le stringhe eseguono conversioni in base alle impostazioni cultura correnti per l'applicazione. La funzione CDate, ad esempio, riconosce i formati di data in base alle impostazioni internazionali del sistema. È necessario specificare il giorno, il mese e l'anno nell'ordine corretto in base alle impostazioni internazionali utilizzate. In caso contrario, è possibile che la data non venga interpretata correttamente. Un formato di data esteso contenente la stringa del giorno della settimana, ad esempio "mercoledì", non viene riconosciuto.
Se è necessario eseguire la conversione in o da una rappresentazione di stringa di un valore in un formato diverso da quello specificato dalle impostazioni internazionali, non è possibile utilizzare le funzioni di conversione dei tipi di Visual Basic. A tale scopo, utilizzare i metodi ToString(IFormatProvider) e Parse(String, IFormatProvider) del tipo di valore. Utilizzare ad esempio Double.Parse per la conversione di una stringa in un tipo Double e Double.ToString per la conversione di un valore di tipo Double in una stringa.
Funzione CType
La funzione CType accetta un secondo argomento, typename, e assegna expression a typename. typename può essere un qualsiasi tipo di dati, struttura, classe o interfaccia per cui esiste una conversione valida.
Per un confronto di CType con le altre parole chiave per la conversione dei tipi, vedere DirectCast e TryCast.
Esempio di CBool
Nell'esempio riportato di seguito viene utilizzata la funzione CBool per convertire espressioni in valori Boolean. Se un'espressione restituisce un valore diverso da zero, CBool restituisce True, altrimenti restituisce 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)
Esempio di CByte
Nell'esempio riportato di seguito viene utilizzata la funzione CByte per convertire un'espressione in un valore Byte.
Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)
Esempio di CChar
Nell'esempio riportato di seguito viene utilizzata la funzione CChar per convertire il primo carattere di un'espressione String in un tipo Char.
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)
L'argomento di input per CChar deve essere costituito da un tipo di dati Char o String. La funzione CChar non può essere utilizzata per convertire un numero in un carattere. CChar non è infatti in grado di accettare tipi di dati numerici. Nell'esempio riportato di seguito viene ottenuto un numero che rappresenta un punto di codice (codice carattere) e viene convertito nel carattere corrispondente. Vengono utilizzati la Funzione InputBox (Visual Basic) per ottenere la stringa di cifre, CInt per convertire la stringa nel tipo Integer e ChrW per convertire il numero nel tipo 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)
Esempio di CDate
Nell'esempio riportato di seguito viene utilizzata la funzione CDate per convertire stringhe in valori Date. Non è in genere consigliabile definire a livello di codice le date e le ore come stringhe (come illustrato in questo esempio). Utilizzare invece valori letterali di data e ora, quali #Feb 12, 1969# e #4:35:47 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)
Esempio di 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)
Esempio di CDec
Nell'esempio riportato di seguito viene utilizzata la funzione CDec per convertire un valore numerico in 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)
Esempio di CInt
Nell'esempio riportato di seguito viene utilizzata la funzione CInt per convertire un valore nel tipo Integer.
Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)
Esempio di CLng
Nell'esempio riportato di seguito viene utilizzata la funzione CLng per convertire valori nel tipo 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)
Esempio di CObj
Nell'esempio riportato di seguito viene utilizzata la funzione CObj per convertire un valore numerico in Object. La variabile Object contiene solo un puntatore a quattro byte che fa riferimento al valore Double assegnato.
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)
Esempio di CSByte
Nell'esempio riportato di seguito viene utilizzata la funzione CSByte per convertire un valore numerico in SByte.
Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)
Esempio di CShort
Nell'esempio riportato di seguito viene utilizzata la funzione CShort per convertire un valore numerico in Short.
Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)
Esempio di CSng
Nell'esempio riportato di seguito viene utilizzata la funzione CSng per convertire valori nel tipo 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)
Esempio di CStr
Nell'esempio riportato di seguito viene utilizzata la funzione CStr per convertire un valore numerico in 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)
Nell'esempio riportato di seguito viene utilizzata la funzione CStr per convertire valori Date in valori String.
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)
La funzione CStr visualizza sempre un valore Date nel formato breve standard per le impostazioni internazionali correnti, ad esempio "6/15/2003 4:35:47 PM". Tuttavia, CStr elimina i valori neutri 1/1/0001 per la data e 00:00:00 per l'ora.
Per informazioni dettagliate sui valori restituiti da CStr, vedere Valori restituiti dalla funzione CStr.
Esempio di CUInt
Nell'esempio riportato di seguito viene utilizzata la funzione CUInt per convertire un valore numerico in UInteger.
Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)
Esempio di CULng
Nell'esempio riportato di seguito viene utilizzata la funzione CULng per convertire un valore numerico in ULong.
Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)
Esempio di CUShort
Nell'esempio riportato di seguito viene utilizzata la funzione CUShort per convertire un valore numerico in UShort.
Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)
Vedere anche
Riferimenti
Funzioni di conversione (Visual Basic)
Funzioni Int e Fix (Visual Basic)