Compartir a través de


Funciones de conversión de tipos (Visual Basic)

Estas funciones se compilan en línea, 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
Obligatorio. Cualquier expresión del tipo de datos de origen.

Tipo de datos de valor devuelto

El nombre de la función determina el tipo de datos del valor que devuelve, como se muestra en la tabla siguiente.

Nombre de la función Tipo de datos devuelto Intervalo para expression el argumento
CBool Tipo de datos booleano Cualquier expresión válida Char o String numérica.
CByte Tipo de datos Byte Byte.MinValue (0) a Byte.MaxValue (255) (sin signo); las partes fraccionarios se redondean.1

A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de bytes de punto flotante a byte con la CByte función; vea la sección Comentarios para obtener más información. Consulte la sección Ejemplo de CInt para obtener un ejemplo.
CChar Tipo de datos Char Cualquier expresión o Char válidaString; solo se convierte el primer carácter de un String ; el valor puede ser de 0 a 65535 (sin signo).
CDate Tipo de datos de fecha Cualquier representación válida de una fecha y hora.
CDbl Tipo de datos doble -1.79769313486231570E+308 a -4.94065645841246544E-324 para valores negativos; 4.94065645841246544E-324 a 1.79769313486231570E+308 para 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 intervalo es +/-7.9228162514264337593543950335. El número distinto de cero más pequeño posible es 0,000000000000000000000000001 (+/-1E-28).
CInt Tipo de datos entero Int32.MinValue (-2.147.483.648) a Int32.MaxValue (2.147.483.647); las partes fraccionadas se redondean.1

A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de enteros de punto flotante a entero con la CInt función; vea la sección Comentarios para obtener más información. Consulte la sección Ejemplo de CInt para obtener un ejemplo.
CLng Tipo de datos Long Int64.MinValue (-9.223.372.036.854.775.808) a Int64.MaxValue (9.223.372.036.854.775.807); las partes fraccionarios se redondean.1

A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de enteros de punto flotante a 64 bits con la CLng función; vea la sección Comentarios para obtener más información. Consulte la sección Ejemplo de CInt para obtener un ejemplo.
CObj Tipo de datos de objeto Cualquier expresión válida.
CSByte Tipo de datos SByte SByte.MinValue (-128) a SByte.MaxValue (127); las partes fraccionadas se redondean.1

A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de bytes con signo de punto flotante con la CSByte función; vea la sección Comentarios para obtener más información. Consulte la sección Ejemplo de CInt para obtener un ejemplo.
CShort Tipo de datos corto Int16.MinValue (-32.768) a Int16.MaxValue (32.767); las partes fraccionales se redondean.1

A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de enteros de punto flotante a 16 bits con la CShort función; vea la sección Comentarios para obtener más información. Consulte la sección Ejemplo de CInt para obtener un ejemplo.
CSng Tipo de datos único -3.402823E+38 a -1.401298E-45 para valores negativos; 1.401298E-45 a 3.402823E+38 para los valores positivos.
CStr Tipo de datos de cadena Devuelve para CStr que dependa del expression argumento . Consulte Valores devueltos para la función CStr.
CUInt Tipo de datos UInteger UInt32.MinValue (0) a UInt32.MaxValue (4.294.967.295) (sin signo); las partes fraccionarios se redondean.1

A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de enteros sin signo con la CUInt función ; vea la sección Comentarios para obtener más información. Consulte la sección Ejemplo de CInt para obtener un ejemplo.
CULng Tipo de datos ULong UInt64.MinValue (0) hasta UInt64.MaxValue (18.446.744.073.709.551.615) (sin signo); las partes fraccionarios se redondean.1

A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de enteros CULng sin signo con la función ; vea la sección Comentarios para obtener más información. Consulte la sección Ejemplo de CInt para obtener un ejemplo.
CUShort Tipo de datos de UShort UInt16.MinValue (0) a UInt16.MaxValue (65,535) (sin signo); las partes fraccionadas se redondean.1

A partir de Visual Basic 15.8, Visual Basic optimiza el rendimiento de la conversión de enteros de 16 bits sin signo con la CUShort función; vea la sección Comentarios para obtener más información. Consulte la sección Ejemplo de CInt para obtener un ejemplo.

1 Las partes fraccionales pueden estar sujetas a un tipo especial de redondeo denominado redondeo bancario. Vea "Comentarios" para obtener más información.

Observaciones

Como regla, debe usar las funciones de conversión de tipos de Visual Basic en preferencia a los métodos de .NET Framework como ToString(), ya sea en la Convert clase o en una estructura o clase 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 en BooleanInteger. Para obtener más información, consulte Solución de problemas de tipos de datos.

A partir de Visual Basic 15.8, el rendimiento de la conversión de enteros de punto a entero flotante se optimiza cuando se pasa el Single valor o Double devuelto por los métodos siguientes a una de las funciones de conversión de enteros (CByte, CShort, CIntCLngCSByteCUShort, ): CUIntCULng

Esta optimización permite que el código que realice un gran número de conversiones de enteros se ejecute hasta dos veces más rápido. En el ejemplo siguiente se muestran estas conversiones de punto 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

  • Coacció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 normalmente se produciría una precisión simple, una precisión doble o una aritmética de enteros.

  • Conversiones con errores. Si el expression pasado a la función está fuera del intervalo del tipo de datos al que se va a convertir, se produce una OverflowException excepción .

  • Partes fraccionarios. Al convertir un valor no entero en un tipo entero, las funciones de conversión de enteros (CByte, CInt, CLng, CSByte, CShort, CUInt, y CULngCUShort) quitan la parte fraccionaria y redondear el valor al entero más cercano.

    Si la parte fraccionarcional es exactamente 0,5, las funciones de conversión de enteros lo redondean al entero par más cercano. Por ejemplo, 0,5 redondea a 0 y 1,5 y 2,5, ambos redondeo a 2. Esto a veces se denomina redondeo del banco, y su propósito es compensar un sesgo que podría acumularse al agregar muchos números juntos.

    CInt y CLng difieren de las Int funciones y Fix , que truncan, en lugar de redondear, la parte fraccionaria de un número. Además, Fix y Int siempre devuelven un valor del mismo tipo de datos que se pasa.

  • Conversiones de fecha y hora. Use la IsDate función 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 valor de Visual Basic 6.0 Date en un Date valor de Visual Basic 2005 o versiones posteriores, puede usar el DateTime.FromOADate método .

  • Valores de fecha y hora neutros. El tipo de datos Date siempre contiene información de fecha y hora. Para la conversión de tipos, Visual Basic considera que 1/1/0001 (1 de enero del año 1) es un valor neutro para la fecha y 00:00:00 (medianoche) para que sea un valor neutro para la hora. Si convierte un Date valor 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 valor original Date y se puede recuperar con funciones como DatePart function.

  • Sensibilidad de la referencia cultural. Las funciones de conversión de tipos que implican cadenas realizan conversiones en función de la configuración cultural actual de la aplicación. Por ejemplo, CDate reconoce 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 a o desde una representación de cadena de un valor en un formato distinto del especificado por la configuración regional, no puede usar las funciones de conversión de tipos de Visual Basic. Para ello, use los ToString(IFormatProvider) métodos y Parse(String, IFormatProvider) del tipo de ese valor. Por ejemplo, use Double.Parse al convertir una cadena en Doubley use Double.ToString al convertir un valor de tipo Double en una cadena.

Operador CType

El operador CType toma un segundo argumento, typename, y coerces expression en typename, donde typename puede ser cualquier tipo de datos, estructura, clase o interfaz a la que exista una conversión válida.

Para obtener una comparación de CType con las otras palabras clave de conversión de tipos, vea el Operador DirectCast y el Operador TryCast.

Ejemplo de CBool

En el ejemplo siguiente se usa la CBool función para convertir expresiones en Boolean valores. 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 CByte función 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 CChar función para convertir el primer carácter de una String expresión en un Char tipo.

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 que CChar debe ser del tipo Char de datos o String. No se puede usar CChar para convertir un número en un carácter, ya que 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. Usa la InputBox función para obtener la cadena de dígitos, CInt para convertir la cadena en el tipo Integery 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 CDate función para convertir cadenas en Date valores. En general, no se recomienda codificar las fechas y horas de forma rígida como cadenas (como se muestra en este ejemplo). Use literales de fecha y literales de hora, como #Feb 12, 1969# y #4:45:23 PM#, en su lugar.

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 CDec función 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 CInt función 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 CLng función 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 CObj función para convertir un valor numérico en Object. La Object propia variable contiene solo un puntero de cuatro bytes, que apunta al Double valor 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 CSByte función 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 CShort función 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 CSng función 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 CStr función 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 CStr función para convertir Date valores en String valores.

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 Date valor en el formato corto estándar para la configuración regional actual, por ejemplo, "6/15/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 obtener más información sobre los valores devueltos por CStr, vea Valores devueltos para la función CStr.

Ejemplo de CUInt

En el ejemplo siguiente se usa la CUInt función 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 CULng función 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 CUShort función 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)

Consulte también