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 coerción una expresión a 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 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 función | Tipo de datos devuelto | Intervalo para expression el argumento |
|---|---|---|
CBool |
Tipo de datos Boolean | Cualquier expresión Char válida String o numérica. |
CByte |
Tipo de datos Byte | Byte.MinValue (0) a Byte.MaxValue (255) (sin signo); las partes fraccionales se redondeen. 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 ; vea la sección Comentarios para obtener CByte más información. Consulte la sección Ejemplo de CInt para obtener un ejemplo. |
CChar |
Tipo de datos Char | Cualquier expresión o válida; solo se convierte el primer carácter de un ; el valor puede ser Char String de 0 a String 65535 (sin signo). |
CDate |
Tipo de datos Date | Cualquier representación válida de una fecha y hora. |
CDbl |
Tipo de datos Double | -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 de escala cero, es decir, números sin posiciones decimales. Para los números con 28 posiciones decimales, el intervalo es +/-7,9228162514264337593543950335. El número menor posible distinto de cero es 0,0000000000000000000000001 (+/-1E-28). |
CInt |
Tipo de datos Integer | Int32.MinValue (-2.147.483.648) a Int32.MaxValue (2.147.483.647); las partes fraccionales se redondea. 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 ; vea la sección Comentarios para obtener CInt 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) hasta Int64.MaxValue (9.223.372.036.854.775.807); las fracciones se redondea. 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 función ; vea la sección Comentarios para obtener más CLng información. Consulte la sección Ejemplo de CInt para obtener un ejemplo. |
CObj |
Object Data Type | Cualquier expresión válida. |
CSByte |
Tipo de datos SByte | SByte.MinValue (-128) a SByte.MaxValue (127); las partes fraccionales se redondea. 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 ; vea la sección Comentarios para obtener más CSByte información. Consulte la sección Ejemplo de CInt para obtener un ejemplo. |
CShort |
Tipo de datos Short | Int16.MinValue (-32.768) a Int16.MaxValue (32.767); las fracciones se redondea. 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 función ; vea la sección Comentarios para obtener más CShort información. Consulte la sección Ejemplo de CInt para obtener un ejemplo. |
CSng |
Tipo de datos Single | -3.402823E+38 a -1.401298E-45 para valores negativos; De 1.401298E-45 a 3.402823E+38 para valores positivos. |
CStr |
Tipo de datos string | Los CStr resultados de dependen del expression argumento . Vea Valores devueltos para la función CStr. |
CUInt |
Tipo de datos UInteger | UInt32.MinValue (de 0) a UInt32.MaxValue (4.294.967.295) (sin signo); las partes fraccionales se redondeen. 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 ; vea la sección Comentarios para obtener más CUInt información. Consulte la sección Ejemplo de CInt para obtener un ejemplo. |
CULng |
Tipo de datos ULong | UInt64.MinValue (0) a UInt64.MaxValue (18.446.744.073.709.551.615) (sin signo); las partes fraccionales se redondeen. 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 ; vea la sección Comentarios para obtener más CULng información. Consulte la sección Ejemplo de CInt para obtener un ejemplo. |
CUShort |
Tipo de datos UShort | UInt16.MinValue (0) a UInt16.MaxValue (65 535) (sin signo); las partes fraccionales se redondeen. 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 ; vea la sección Comentarios para obtener más CUShort información. Consulte la sección Ejemplo de CInt para obtener un ejemplo. |
1 Las fracciones pueden estar sujetas a un tipo especial de redondeo denominado redondeo del banco. Vea "Comentarios" para obtener más información.
Comentarios
Como regla general, debe usar las funciones de conversión de tipos Visual Basic en lugar de los métodos .NET Framework como , ya sea en la clase o en una clase o estructura de ToString() Convert tipos individuales. Las Visual Basic están diseñadas para una interacción óptima con Visual Basic código fuente, y también hacen que el código fuente sea más corto y fácil de leer. Además, los métodos .NET Framework conversión no siempre producen los mismos resultados que las funciones Visual Basic, por ejemplo, al convertir Boolean a Integer . Para obtener más información, vea Solución de problemas de tipos de datos.
A partir de Visual Basic 15.8, el rendimiento de la conversión de punto flotante a entero se optimiza cuando se pasa el valor o devuelto por los métodos siguientes a una de las funciones de conversión de enteros Single ( , , , , , , Double , 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 optimizadas de punto flotante a entero:
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
Coerció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 para forzar la aritmética decimal en los casos en los que normalmente se realizarían operaciones aritméticas de precisión sencilla, precisión doble
CDeco entero.Conversiones con errores. Si el pasado a la función está fuera del intervalo del tipo de datos al que se va
expressiona convertir, se OverflowException produce una excepción .Partes fraccionales. Al convertir un valor no entero en un tipo entero, las funciones de conversión de enteros ( , , , , , , y ) quitan la parte fraccionera y
CByteCIntCLngCSByteCShortCUIntCULngCUShortredondean el valor al entero más cercano.Si la parte fraccionera es exactamente 0,5, las funciones de conversión de enteros la redondea al entero par más cercano. Por ejemplo, 0,5 se redondea a 0 y 1,5 y 2,5 se redondea 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 de estos números juntos.
CIntyCLngdifieren de las funciones y , que truncan, en lugar de Int Fix redondear, la parte fraccionera de un número. Además,FixyIntsiempre 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.
CDatereconoce literales de fecha y literales de hora, pero no valores numéricos. Para convertir un Visual Basic 6.0 en un valorDateDatede 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) como un valor neutro para la hora. Si convierte un
Datevalor en una cadena, no incluye valoresCStrneutros en la cadena resultante. Por ejemplo, si convierte en una cadena, el resultado es#January 1, 0001 9:30:00#"9:30:00 AM"; se suprime la información de fecha. Sin embargo, la información de fecha sigue estando presente en el valor originalDatey se puede recuperar con funciones como DatePart function.Confidencialidad de la referencia cultural. Las funciones de conversión de tipos que implican cadenas realizan conversiones basadas en la configuración de referencia cultural actual de la aplicación. Por ejemplo,
CDatereconoce 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 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 Visual Basic tipo. Para ello, use los
ToString(IFormatProvider)Parse(String, IFormatProvider)métodos y del tipo de ese valor. Por ejemplo, use Double.Parse al convertir una cadena en y al convertir un valor de tipo en unaDoubleDouble.ToStringDoublecadena.
CType Function
La función CType toma un segundo argumento, , y coerciones a , donde puede ser cualquier tipo de typename expression typename datos, estructura, clase o interfaz en el que exista una typename conversión válida.
Para obtener una comparación de con CType las otras palabras clave de conversión de tipos, vea DirectCast Operator y TryCast Operator.
Ejemplo de CBool
En el ejemplo siguiente se usa CBool la función para convertir expresiones en Boolean valores. Si una expresión se evalúa como un valor distinto de cero, CBool devuelve ; de lo True 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 CByte la 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 CChar usa la función para convertir el primer carácter de una expresión en un String 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 CChar que debe ser de tipo de datos o Char String . No se puede CChar usar para convertir un número en un carácter, porque no se puede aceptar un tipo de datos CChar numérico. En el ejemplo siguiente se obtiene un número que representa un punto de código (código de caracteres) y se convierte al carácter correspondiente. Usa la función InputBox para obtener la cadena de dígitos, convertir la cadena al tipo y convertir el número al tipo CInt Integer ChrW 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 CDate la función para convertir cadenas en Date valores. En general, no se recomienda codificar de forma rígida fechas y horas como cadenas (como se muestra en este ejemplo). Use literales de fecha y 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 CDec la 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 CInt la 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 CLng la 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 CObj la función para convertir un valor numérico en Object . La Object propia variable contiene solo un puntero de cuatro bytes, que apunta al valor asignado a Double ella.
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 CSByte la 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 CShort la 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 CSng la 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 CStr la 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 CStr la función para convertir valores en Date 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 valor en el formato corto estándar para la configuración regional actual, por Date ejemplo, "15/6/2003 4:35:47 PM". Sin embargo, suprime los valores CStr 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 CUInt la 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 CULng la 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 CUShort la 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)