Funciones de conversión de tipos (Visual Basic)
Estas funciones se compilan insertadas, lo que significa que el código de conversión forma parte del código que evalúa la expresión. A veces no hay ninguna llamada a un procedimiento para realizar la conversión, lo que mejora el rendimiento. Cada función convierte una expresión en un tipo de datos específico.
Sintaxis
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
Necesario. Cualquier expresión del tipo de datos de origen.
Tipo de datos del valor devuelto
El nombre de la función determina el tipo de datos del valor que devuelve, tal como se muestra en la tabla siguiente.
Nombre de la función | Tipo de datos devuelto | Rango del argumento expression |
---|---|---|
CBool |
Tipo de datos Boolean | Cualquier expresión numérica o de tipo Char o String válida. |
CByte |
Tipo de datos Byte | Byte.MinValue (0) a Byte.MaxValue (255) (sin signo); las partes fraccionarias se redondean.1 A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de punto flotante a byte con la función CByte ; consulte la sección Comentarios para más información. Consulte la sección Ejemplo de CInt para ver un ejemplo. |
CChar |
Tipo de datos Char | Cualquier expresión Char o String válida; solo se convierte el primer carácter de una expresión String ; el valor puede ir de 0 a 65535 (sin signo). |
CDate |
Date (tipo de datos) | Cualquier representación válida de una fecha y hora. |
CDbl |
Tipo de datos Double | De -1,79769313486231570E+308 a -4,94065645841246544E-324 para los valores negativos; de 4,94065645841246544E-324 a 1,79769313486231570E+308 para los valores positivos. |
CDec |
Tipo de datos Decimal | +/-79 228 162 514 264 337 593 543 950 335 para números a escala cero, es decir, números sin posiciones decimales. Para números con 28 posiciones decimales, el rango es +/-7,9228162514264337593543950335. El número más pequeño posible distinto de cero es 0,0000000000000000000000000001 (+/-1E-28). |
CInt |
Integer (tipo de datos) | De Int32.MinValue (-2 147 483 648) a Int32.MaxValue (2 147 483 647); las partes fraccionarias se redondean.1 A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de punto flotante a entero con la función CInt ; consulte la sección Comentarios para más información. Consulte la sección Ejemplo de CInt para ver un ejemplo. |
CLng |
Tipo de datos Long | De Int64.MinValue (-9 223 372 036 854 775 808) a Int64.MaxValue (9 223 372 036 854 775 807); las partes fraccionarias se redondean.1 A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de punto flotante a entero de 64 bits con la función CLng ; consulte la sección Comentarios para más información. Consulte la sección Ejemplo de CInt para ver un ejemplo. |
CObj |
Object Data Type | Cualquier expresión válida. |
CSByte |
Tipo de datos SByte | De SByte.MinValue (-128) a SByte.MaxValue (127); las partes fraccionarias se redondean.1 A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de punto flotante a byte con signo con la función CSByte ; consulte la sección Comentarios para más información. Consulte la sección Ejemplo de CInt para ver un ejemplo. |
CShort |
Tipo de datos Short | De Int16.MinValue (-32 768) a Int16.MaxValue (32 767); las partes fraccionarias se redondean.1 A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de punto flotante a entero de 16 bits con la función CShort ; consulte la sección Comentarios para más información. Consulte la sección Ejemplo de CInt para ver un ejemplo. |
CSng |
Tipo de datos Single | De -3,402823E+38 a -1,401298E-45 para los valores negativos; de 1,401298E-45 a 3,402823E+38 para los valores positivos. |
CStr |
String (tipo de datos) | Los valores devueltos para CStr dependen del argumento expression . Consulte Valores devueltos para la función CStr. |
CUInt |
Tipo de datos UInteger | De UInt32.MinValue (0) a UInt32.MaxValue (4 294 967 295) (sin signo); las partes fraccionarias se redondean.1 A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de punto flotante a entero sin signo con la función CUInt ; consulte la sección Comentarios para más información. Consulte la sección Ejemplo de CInt para ver un ejemplo. |
CULng |
Tipo de datos ULong | De UInt64.MinValue (0) a UInt64.MaxValue (18 446 744 073 709 551 615) (sin signo); las partes fraccionarias se redondean.1 A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de punto flotante a entero largo sin signo con la función CULng ; consulte la sección Comentarios para más información. Consulte la sección Ejemplo de CInt para ver un ejemplo. |
CUShort |
Tipo de datos UShort | De UInt16.MinValue (0) a UInt16.MaxValue (65 535) (sin signo); las partes fraccionarias se redondean.1 A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de punto flotante a entero de 16 bits sin signo con la función CUShort ; consulte la sección Comentarios para más información. Consulte la sección Ejemplo de CInt para ver un ejemplo. |
1 Las partes fraccionarias pueden estar sujetas a un tipo especial de redondeo denominado redondeo bancario. Para más información, consulte "Comentarios".
Comentarios
Como regla, debe usar las funciones de conversión de tipos de Visual Basic antes que los métodos de .NET Framework como ToString()
, ya sea en la clase Convert o en una clase o estructura de tipo individual. Las funciones de Visual Basic están diseñadas para una interacción óptima con el código de Visual Basic y también hacen que el código fuente sea más corto y fácil de leer. Además, los métodos de conversión de .NET Framework no siempre generan los mismos resultados que las funciones de Visual Basic; por ejemplo, al convertir Boolean
en Integer
. Para más información, consulte Solución de problemas de los tipos de datos.
A partir de Visual Basic 15.8, el rendimiento de la conversión de punto flotante a entero se optimiza al pasar el valor Single o Double que devuelven los métodos siguientes a una de las funciones de conversión de enteros (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)
Esta optimización permite que el código que realiza un gran número de conversiones de enteros se ejecute hasta el doble de rápido. En el ejemplo siguiente, se muestran estas conversiones de punto flotante a entero optimizadas:
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
Comportamiento
Conversión. En general, puede usar las funciones de conversión de tipos de datos para convertir el resultado de una operación en un tipo de datos determinado en lugar del tipo de datos predeterminado. Por ejemplo, use
CDec
para forzar la aritmética decimal en los casos en los que habitualmente tendría lugar una precisión sencilla, una precisión doble o una aritmética de enteros.Conversiones con errores. Si el objeto
expression
que se pasa a la función está fuera del rango del tipo de datos al que se va a convertir, se produce una excepción OverflowException.Partes fraccionarias. Cuando convierte un valor no entero en un tipo entero, las funciones de conversión de enteros (
CByte
,CInt
,CLng
,CSByte
,CShort
,CUInt
,CULng
yCUShort
) quitan la parte fraccionaria y redondean el valor al entero más cercano.Si la parte fraccionaria es exactamente 0,5, las funciones de conversión de enteros la redondean al entero par más cercano. Por ejemplo, 0,5 se redonda a 0 y tanto 1,5 como 2,5 se redondean a 2. A veces, esto se denomina redondeo bancario y su propósito es compensar el sesgo que se puede acumular al sumar una cantidad tan grande de números.
CInt
yCLng
difieren de las funciones Int y Fix, las que truncan la parte fraccionaria de un número, en lugar de redondearla. Además,Fix
yInt
siempre devuelven un valor del mismo tipo de datos que pasa.Conversiones de fecha y hora. Use la función IsDate para determinar si un valor se puede convertir a una fecha y hora.
CDate
reconoce literales de fecha y literales de hora, pero no valores numéricos. Para convertir un valorDate
de Visual Basic 6.0 en un valorDate
en Visual Basic 2005 o versiones posteriores, puede usar el método DateTime.FromOADate.Valores neutros de fecha y hora. El tipo de datos de fecha siempre contiene información tanto de fecha como de hora. Para los fines de conversión de tipos, Visual Basic considera 1/1/0001 (1 de enero del año 1) como valor neutro para la fecha y 00:00:00 (medianoche) como valor neutro para la hora. Si convierte un valor
Date
en una cadena,CStr
no incluye valores neutros en la cadena resultante. Por ejemplo, si convierte#January 1, 0001 9:30:00#
en una cadena, el resultado es "9:30:00 AM"; se suprime la información de fecha. Sin embargo, la información de fecha sigue presente en el valorDate
original y se puede recuperar con funciones como DatePart.Sensibilidad a la referencia cultural. Las funciones de conversión de tipos que implican cadenas realizan conversiones en función de la configuración de referencia cultural actual de la aplicación. Por ejemplo,
CDate
reconoce los formatos de fecha según la configuración regional del sistema. Debe proporcionar el día, el mes y el año en el orden correcto para la configuración regional o es posible que la fecha no se interprete correctamente. No se reconoce un formato de fecha larga si contiene una cadena de día de la semana, como "miércoles".Si necesita convertir en una representación de cadena o desde una representación de cadena de un valor en un formato distinto del que se especifica en la configuración regional, no puede usar las funciones de conversión de tipos de Visual Basic. Para ello, use los métodos
ToString(IFormatProvider)
yParse(String, IFormatProvider)
del tipo de ese valor. Por ejemplo, use Double.Parse al convertir una cadena enDouble
y use Double.ToString al convertir un valor de tipoDouble
en una cadena.
CType Function
La función CType toma un segundo argumento, typename
, y convierte expression
en typename
, donde typename
puede ser cualquier tipo de datos, estructura, clase o interfaz para el que existe una conversión válida.
Para obtener una comparación de CType
con las otras palabras clave de conversión de tipos, consulte DirectCast (Operador) y TryCast (Operador).
Ejemplo de CBool
En el ejemplo siguiente, se usa la función CBool
para convertir expresiones a valores Boolean
. Si una expresión se evalúa como un valor distinto de cero, CBool
devuelve True
; de lo contrario, devuelve 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)
Ejemplo de CByte
En el ejemplo siguiente, se usa la función CByte
para convertir una expresión 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)
Ejemplo de CChar
En el ejemplo siguiente, se usa la función CChar
para convertir el primer carácter de una expresión String
en 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)
El argumento de entrada para CChar
debe ser del tipo de datos Char
o String
. No se puede usar CChar
para convertir un número en un carácter, porque CChar
no puede aceptar un tipo de datos numérico. En el ejemplo siguiente, se obtiene un número que representa un punto de código (código de carácter) y se convierte en el carácter correspondiente. Se usa la función InputBox para obtener la cadena de dígitos, CInt
para convertir la cadena en el tipo Integer
y ChrW
para convertir el número en el 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)
Ejemplo de CDate
En el ejemplo siguiente, se usa la función CDate
para convertir cadenas en valores Date
. En general, no se recomienda la codificación rígida de fechas y horas como cadenas (como se muestra en este ejemplo). En su lugar, use literales de fecha y hora, como #Feb 12, 1969# y #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)
Ejemplo de 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)
Ejemplo de CDec
En el ejemplo siguiente, se usa la función CDec
para convertir un valor numérico en 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)
Ejemplo de CInt
En el ejemplo siguiente, se usa la función CInt
para convertir un valor en Integer
.
Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)
Ejemplo de CLng
En el ejemplo siguiente, se usa la función CLng
para convertir valores en 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)
Ejemplo de CObj
En el ejemplo siguiente, se usa la función CObj
para convertir un valor numérico en Object
. La variable Object
misma solo contiene un puntero de cuatro bytes, que apunta al valor Double
que tiene asignado.
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)
Ejemplo de CSByte
En el ejemplo siguiente, se usa la función CSByte
para convertir un valor numérico en SByte
.
Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)
Ejemplo de CShort
En el ejemplo siguiente, se usa la función CShort
para convertir un valor numérico en Short
.
Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)
Ejemplo de CSng
En el ejemplo siguiente, se usa la función CSng
para convertir valores en 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)
Ejemplo de CStr
En el ejemplo siguiente, se usa la función CStr
para convertir un valor numérico en 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)
En el ejemplo siguiente, se usa la función CStr
para convertir valores Date
en valores 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)
CStr
siempre representa un valor Date
en el formato corto estándar correspondiente a la configuración regional actual; por ejemplo, "15/6/2003 4:35:47 PM". Sin embargo, CStr
suprime los valores neutros de 1/1/0001 para la fecha y 00:00:00 para la hora.
Para más detalles sobre los valores que devuelve CStr
, consulte Valores devueltos para la función CStr.
Ejemplo de CUInt
En el ejemplo siguiente, se usa la función CUInt
para convertir un valor numérico en UInteger
.
Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)
Ejemplo de CULng
En el ejemplo siguiente, se usa la función CULng
para convertir un valor numérico en ULong
.
Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)
Ejemplo de CUShort
En el ejemplo siguiente, se usa la función CUShort
para convertir un valor numérico en UShort
.
Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)