Funciones de Conversión de Tipos en VS2013
Funciones de Conversión de Tipos en VS2013
Funciones de Conversión de Tipos en VS2013
Estas funciones se compilan en línea, es decir, el código de conversión forma parte del código
que evalúa la expresión.A veces no se produce una llamada a un procedimiento para realizar la
conversión, lo que mejora el rendimiento.Cada función convierte una expresión a un tipo de
datos específico.
Copiar
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
El nombre de función determina el tipo de datos del valor devuelto, como se muestra en la
tabla siguiente.
Nombre Tipo de
de la datos Intervalo de valores del argumento expression
función devuelto
Boolean
(Tipo de
CBool datos, Cualquier expresión numérica, Char o String válida.
Visual
Basic)
CByte Byte (Tipo 0 a 255 (sin signo); las partes fraccionarias se redondean.1
de datos,
Visual
Basic)
Char (Tipo
Cualquier expresión Char o String válida; sólo se convierte el primer
de datos,
CChar carácter de String; el valor puede estar comprendido entre 0 y 65535
Visual
(sin signo).
Basic)
Date (Tipo
de datos,
CDate Cualquier representación válida de fecha y hora.
Visual
Basic)
Double
(Tipo de de -1,79769313486231570E+308 a -4,94065645841246544E-324
CDbl datos, para valores negativos; de 4,94065645841246544E-324 a
Visual 1,79769313486231570E+308 para valores positivos.
Basic)
Decimal +/-79.228.162.514.264.337.593.543.950.335 para números a partir de
(Tipo de cero, es decir, números sin decimales.Para números con 28 posiciones
CDec datos, decimales, el intervalo es +/-7,9228162514264337593543950335.El
Visual menor número posible distinto de cero es
Basic) 0,0000000000000000000000000001 (+/-1E-28).
Integer
(Tipo de
de -2.147.483.648 a 2.147.483.647; las partes fraccionarias se
CInt datos,
redondean.1
Visual
Basic)
Long (Tipo
de datos, de -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807; las
CLng
Visual partes fraccionarias se redondean.1
Basic)
Object
CObj (Tipo de Cualquier expresión válida.
datos)
SByte (Tipo
de datos,
CSByte de -128 a 127; las partes fraccionarias se redondean.1
Visual
Basic)
Short (Tipo
de datos,
CShort de -32.768 a 32.767; las partes fraccionarias se redondean.1
Visual
Basic)
Single
De -3,402823E+38 a –1,401298E-45 para valores negativos; de
CSng (Tipo de
1,401298E-45 a 3,402823E+38 para valores positivos.
datos,
Visual
Basic)
String (Tipo
de datos, Los valores devueltos para CStr dependen del argumento
CStr
Visual expression.Vea Valores devueltos para la función CStr (Visual Basic).
Basic)
UInteger
de 0 a 4.294.967.295 (sin signo); las partes fraccionarias se
CUInt (Tipo de
redondean.1
datos)
ULong
(Tipo de
de 0 a 18.446.744.073.709.551.615 (sin signo); las partes fraccionarias
CULng datos,
se redondean.1
Visual
Basic)
UShort
(Tipo de
CUShort datos, de 0 a 65.535 (sin signo); las partes fraccionarias se redondean.1
Visual
Basic)
1 Las partes fraccionarias pueden estar sujetas a un tipo especial de redondeo denominado
redondeo bancario.Vea "Comentarios" para obtener más información.
Comentarios
Por regla general, debe utilizar preferentemente las funciones de conversión de tipos de Visual
Basic que los métodos de .NET Framework, como ToString(), en la clase Convert o en una
clase o estructura individual de tipos.Las funciones de Visual Basic se han diseñado para que
interactúen de forma óptima con el código de Visual Basic; además hacen que el código fuente
sea más corto y fácil de leer.Asimismo, los métodos de conversión de .NET Framework no
siempre producen los mismos resultados que las funciones de Visual Basic, por ejemplo
cuando se convierte de Boolean a Integer.Para obtener más información, vea Solucionar
problemas de tipos de datos (Visual Basic).
Comportamiento
CType (Función)
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
la que exista una conversión válida.
Para una comparación de CType con las otras palabras clave de conversión de tipos, vea
DirectCast (Operador) (Visual Basic) y TryCast (Operador) (Visual Basic).
En este ejemplo se utiliza la función CBool para convertir expresiones en valores Boolean.Si
una expresión se evalúa en un valor distinto de cero, CBool devuelve True; en caso contrario,
devuelve False.
VB
Copiar
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)
VB
Copiar
Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)
En el ejemplo siguiente se utiliza la función CChar para convertir el primer carácter de una
expresión String en un tipo Char.
VB
Copiar
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 pertenecer al tipo de datos Char o String.No puede
utilizar CChar para convertir un número en un carácter, porque CChar no acepta un tipo de
datos numéricos.En el ejemplo siguiente se obtiene un número que representa un punto de
código (código de carácter) y se convierte al carácter correspondiente.En el ejemplo se utiliza
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.
VB
Copiar
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)
En este ejemplo se utiliza la función CDate para convertir cadenas en valores Date.En general,
no se recomienda especificar las fechas y horas como cadenas en el código, tal y como se
puede ver en este ejemplo.Utilice literales de fecha y hora, por ejemplo #Feb 12, 1969# y
#4:45:233 p.m.#.
VB
Copiar
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)
VB
Copiar
Dim aDouble As Double
Dim aDecimal As Decimal
aDouble = 10000000.0587
' The following line of code sets aDecimal to 10000000.0587.
aDecimal = CDec(aDouble)
VB
Copiar
Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)
VB
Copiar
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)
VB
Copiar
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
VB
Copiar
Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)
En el siguiente ejemplo se utiliza la función CShort para convertir un valor numérico en Short.
VB
Copiar
Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)
VB
Copiar
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)
En el siguiente ejemplo se utiliza la función CStr para convertir un valor numérico en String.
VB
Copiar
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 utiliza la función CStr para convertir valores Date en valores String.
VB
Copiar
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)
Para obtener información detallada sobre los valores devueltos por CStr, vea Valores
devueltos para la función CStr (Visual Basic).
Ejemplo de CUInt
VB
Copiar
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
VB
Copiar
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
VB
Copiar
Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)
En la tabla siguiente se describen los valores devueltos por la función CStr en varios tipos de
expression.
El tipo Date siempre contiene información de fecha y hora.Para la conversión de tipos, Visual
Basic considera 1/1/0001 (1 de enero del año 1) un valor neutral de fecha y 00:00:00
(medianoche) un valor neutral de hora.CStr no incluye los valores neutros en la cadena
resultante.Por ejemplo, si se convierte #January 1, 0001 9:30:00# en una cadena, el resultado
sería "9:30:00 a.m.", ya que la información de fecha se omite.No obstante, la información de
fecha sigue estando presente en el valor Date original y se puede recuperar mediante funciones
como DatePart.
Nota
La función CStr realiza su conversión basándose en la configuración de la referencia cultural
actual de la aplicación.Para obtener la representación en forma de cadena de un número en una
referencia cultural determinada, utilice el método ToString(IFormatProvider) del número.Por
ejemplo, utilice Double.ToString al convertir un valor de tipo Double en String.
Contiene valores que pueden ser sólo True o False.Las palabras clave True y False
corresponden a los dos estados de las variables Boolean.
Comentarios
Utilice Boolean (Tipo de datos, Visual Basic) para contener valores de dos estados como
verdadero/falso, sí/no o activado/desactivado.
Conversiones de tipo
Cuando Visual Basic convierte los valores de tipos de datos numéricos en Boolean, 0 pasa a
ser False y todos los otros valores, True.Cuando Visual Basic convierte los valores Boolean en
tipos numéricos, False pasa a ser 0 y True, -1.
Al convertir entre valores Boolean y tipos de datos numéricos, recuerde que los métodos de
conversión de .NET Framework no siempre producen los mismos resultados que las palabras
clave de conversión de Visual Basic.Esto se debe a que la conversión de Visual Basic
conserva un comportamiento compatible con versiones anteriores.Para obtener más
información, vea la sección sobre cómo el tipo Boolean no se convierte al tipo numérico
correctamente en Solucionar problemas de tipos de datos (Visual Basic).
Sugerencias de programación
Ejemplo
En el ejemplo siguiente, runningVB es una variable Boolean que almacena un único parámetro
de tipo sí/no.
Copiar
Dim runningVB As Boolean
' Check to see if program is running on Visual Basic engine.
If scriptEngine = "VB" Then
runningVB = True
End If
Contiene valores IEEE de 64 bits (8 bytes) que representan fechas comprendidas entre el 1 de
enero del año 0001 y el 31 de diciembre de 9999, y horas comprendidas entre las 0:00:00
(medianoche) y las 11:59:59.Cada incremento representa 100 nanosegundos de tiempo
transcurrido desde el comienzo del 1 de enero del año 1 del calendario gregoriano.El valor
máximo representa 100 nanosegundos antes del comienzo del 1 de enero del año 10000.
Comentarios
Utilice el tipo de datos Date para albergar valores de fecha, valores de tiempo o valores de
fecha y hora.
El valor predeterminado de Date es 0:00:00 (medianoche) del 1 de enero de 0001.
Requisitos de formato
Debe incluir un literal Date dentro de los signos de número (# #).Debe especificar el valor de
fecha en el formato M/d/yyyy, por ejemplo #5/31/1993#.Este requisito es independiente de la
configuración regional y de la configuración de formato de fecha y hora del equipo.
El motivo de esta restricción es que el significado del código nunca debe cambiar en función
de la configuración regional en que se ejecuta la aplicación.Suponga que codifica un literal
Date de #3/4/1998# y piensa que signifique el 4 de marzo de 1998.En una configuración
regional que use el formato mm/dd/aaaa, 3/4/1998 se compila como desee.Pero suponga que
implementa la aplicación en varios países.En una configuración regional que use el formato
dd/mm/aaaa, el literal incluido en el código se compilará como April 3, 1998.En una
configuración local que utilice el formato aaaa/mm/dd, el literal no sería válido (April 1998,
0003) y generaría un error de compilación.
Soluciones
Copiar
MsgBox("The formatted date is " & Format(#5/31/1993#, "dddd, d MMM yyyy"))
Copiar
Dim dateInMay As New System.DateTime(1993, 5, 31, 12, 14, 0)
Formato de hora
Puede especificar el valor de hora con un formato de 12 horas o de 24 horas, por ejemplo
#1:15:30 PM# o #13:15:30#.Sin embargo, si no especifica los minutos ni los segundos, debe
especificar a.m. o p.m.
Si no incluye una fecha en un literal de fecha y hora, Visual Basic establecerá la parte del
valor correspondiente a la fecha en el 1 de enero de 0001.Si no incluye una hora en un literal
de fecha y hora, Visual Basic establecerá la parte del valor correspondiente a la hora en el
comienzo del día, es decir, medianoche (0:00:00)
Conversiones de tipo
Si convierte un valor Date al tipo String, Visual Basic representa la fecha en función del
formato corto de fecha especificado por la configuración regional en tiempo de ejecución, y
representa la hora de acuerdo con el formato de hora (12 o 24 horas) especificado por la
configuración regional en tiempo de ejecución.
Sugerencias de programación
Consideraciones de interoperabilidad. Si
está interactuando con componentes que no
se han escrito para .NET Framework, por
ejemplo objetos de automatización u
objetos COM, tenga presente que los tipos
de fecha y hora definidos en otros entornos
no son compatibles con el tipo Date de
Visual Basic.Al transferir un argumento de
fecha y hora a un componente de este tipo,
declárelo como Double en lugar de Date en
el nuevo código de Visual Basic, y utilice
los métodos de conversión
DateTime.FromOADate y
DateTime.ToOADate.
Caracteres de tipo.Date no tiene caracteres
de tipo literal ni caracteres de tipo
identificador.Sin embargo, el compilador
trata los literales incluidos entre caracteres
de signo de número (# #) como Date.
Tipo en Framework. El tipo
correspondiente en .NET Framework es la
estructura System.DateTime.
Ejemplo
Una variable o constante del tipo de datos Date contiene tanto la fecha como la hora.Esto se
ilustra en el siguiente ejemplo:
Copiar
Dim someDateAndTime As Date = #8/13/2002 12:14 PM#
Tipos de datos numéricos (Visual Basic)
Visual Studio 2013
Otras versiones
Visual Basic proporciona diversos tipos de datos numéricos para controlar números en varias
representaciones.Los tipos integrales representan sólo números enteros (positivos, negativos y
cero) y los tipos no integrales representan números con partes enteras y fraccionarias.
Para ver una tabla en la que se muestra una comparación en paralelo de los tipos de datos de
Visual Basic, vea Resumen de tipos de datos (Visual Basic).
Los tipos de datos integrales son aquellos que sólo representan números sin partes
fraccionarias.
Los tipos de datos integrales con signo son SByte (Tipo de datos, Visual Basic) (de 8 bits),
Short (Tipo de datos, Visual Basic) (de 16 bits), Integer (Tipo de datos, Visual Basic) (de 32
bits) y Long (Tipo de datos, Visual Basic) (de 64 bits).Si una variable almacena siempre
enteros en lugar de números fraccionarios, declárela como uno de estos tipos.
Los tipos enteros sin signo son Byte (Tipo de datos, Visual Basic) (de 8 bits), UShort (Tipo de
datos, Visual Basic) (de 16 bits), UInteger (Tipo de datos) (de 32 bits) y ULong (Tipo de
datos, Visual Basic) (de 64 bits).Si una variable contiene datos binarios o datos de naturaleza
desconocida, declárela como uno de estos tipos.
Rendimiento
Los operadores aritméticos son más rápidos con los tipos enteros que con cualquier otro tipo
de datos.Son más rápidos con los tipos Integer y UInteger de Visual Basic.
Enteros grandes
Si es preciso que contenga un entero mayor que el que es capaz de contener el tipo de datos
Integer, puede usar en su lugar el tipo de datos Long.Las variables Long pueden contener
números comprendidos entre -9.223.372.036.854.775.808 y 9.223.372.036.854.775.807.Las
operaciones con Long son ligeramente más lentas que con Integer.
Si necesita valores aun más grandes, puede utilizar Decimal (Tipo de datos, Visual
Basic).Puede contener números de -79.228.162.514.264.337.593.543.950,335 a
79.228.162.514.264.337.593.543.950,335 en una variable Decimal si no utiliza ninguna
posición decimal.Sin embargo, las operaciones con números Decimal son considerablemente
más lentas que con cualquier otro tipo de dato numérico.
Enteros pequeños
Si no necesita el intervalo completo del tipo de datos Integer, puede utilizar el tipo de datos
Short, que puede contener enteros comprendidos entre -32.768 y 32.767.En el caso del
intervalo de enteros más pequeño, el tipo de datos SByte contiene los enteros comprendidos
entre -128 y 127.Si tiene un número muy grande de variables que contienen enteros pequeños,
Common Language Runtime puede almacenar a veces las variables Short y SByte de un modo
más eficaz y ahorrar espacio de memoria.Sin embargo, las operaciones con Short y SByte son
algo más lentas que con Integer.
Si sabe que la variable no va a necesitar contener nunca un número negativo, puede utilizar los
tipos sin signoByte, UShort, UInteger y ULong.Cada uno de estos tipos de datos puede
contener un entero positivo dos veces más grande que su tipo con signo correspondiente
(SByte, Short, Integer y Long).En lo que se refiere a rendimiento, un tipo sin signo es
exactamente tan eficaz como su tipo con signo correspondiente.En particular, UInteger
comparte con Integer la distinción de ser el más eficaz de todos los tipos de datos numérico
básicos.
Los tipos de datos no integrales son aquellos que representan números que contienen tanto
partes enteras como decimales.
Los tipos de datos numéricos no integrales son Decimal (punto fijo de 128 bits), Single (Tipo
de datos, Visual Basic) (punto flotante de 32 bits) y Double (Tipo de datos, Visual Basic)
(punto flotante de 64 bits).Todos ellos son tipos con signo.Si una variable puede contener una
fracción, declárela como variable de uno de estos tipos.
Decimal no es un tipo de datos de punto flotante.Los números de tipo Decimal tienen un valor
entero binario y un factor de escala de entero que especifica qué parte del valor es una fracción
decimal.
Puede utilizar las variables de Decimal por los valores de moneda.la ventaja es la precisión de
los valores.El tipo de datos Double es más rápido y requiere menos memoria, pero está sujeto
a errores de redondeo.El tipo de datos de Decimal proporciona una exactitud total en 28
posiciones decimales.
Los números con punto flotante (Single y Double) tienen intervalos mayores que los números
Decimal pero pueden estar sujetos a errores de redondeo.Los tipos de punto flotante admiten
menos dígitos significativos que Decimal pero pueden representar valores de mayor magnitud.
Los valores de números no integrales se pueden expresar como mmmEeee, donde mmm es la
mantisa (dígitos significativos) y eee es el exponente (una potencia de 10).Los valores
positivos superiores de los tipos no integrales son 7.9228162514264337593543950335E+28
para Decimal, 3.4028235E+38 para Single y 1.79769313486231570E+308 para Double.
Rendimiento
Double es el más eficaz de los tipos de datos fraccionarios, porque los procesadores de las
plataformas actuales realizan las operaciones de punto flotante en precisión doble.Sin
embargo, las operaciones con Double no son tan rápidas como con los tipos enteros como
Integer.
Magnitudes pequeñas
Para los números con la magnitud más pequeña posible (cercana a 0), las variables Double
pueden contener números tan pequeños como -4.94065645841246544E-324 para valores
negativos y 4.94065645841246544E-324 para valores positivos.
Si no necesita el intervalo completo del tipo de datos Double, puede utilizar el tipo de datos
Single, que puede contener números de punto flotante comprendidos entre -3.4028235E+38 y
3.4028235E+38.Las magnitudes más pequeñas para las variables Single son -1.401298E-45
para valores negativos y 1.401298E-45 para valores positivos.Si tiene un número muy grande
de variables que contienen números en punto flotante pequeños, Common Language Runtime
puede almacenar a veces las variables Single de un modo más eficaz y ahorrar espacio de
memoria.
Copiar
CType(expression, typename)
Elementos
expression
Cualquier expresión válida.Si el valor de
expression está fuera del intervalo
permitido por typename, Visual Basic
produce una excepción.
typename
Comentarios
Sugerencia
También puede utilizar las siguientes funciones para realizar una conversión de tipos:
La conversión de tipos funciona como CByte, CDbl y CInt que realizan una conversión
a un tipo de datos específico.Para obtener más información, vea Funciones de
conversión de tipos (Visual Basic).
DirectCast (Operador) (Visual Basic) o TryCast (Operador) (Visual Basic).Estos
operadores requieren que un tipo se herede o implemente en otro tipo.Pueden
proporcionar un mejor rendimiento que CType al convertir al tipo de datos de Object.
CType se compila en línea, es decir, el código de conversión forma parte del código que
evalúa la expresión.En algunos casos, el código se ejecuta con mayor rapidez porque no se
llama a los procedimientos para realizar la conversión.
Si el tipo de datos de expression o typename es una clase o estructura que ha definido, puede
definir CType en dicha clase o estructura como un operador de conversión.Esto hace que
CType actúe como un operador sobrecargado.De este modo, puede controlar el
comportamiento de las conversiones que tienen como destino o como origen la clase o
estructura, incluidas las excepciones que se pueden producir.
Sobrecarga
El operador CType también se puede sobrecargar en una clase o la estructura definida fuera
del código.Si el código realiza conversiones que tienen como destino o como origen una clase
o estructura de este tipo, asegúrese de conocer el comportamiento de su operador CType.Para
obtener más información, vea Procedimientos de operador (Visual Basic).
Ejemplo
En el ejemplo siguiente se utiliza la función CType para convertir una expresión al tipo de
datos Single.
VB
Copiar
Dim testNumber As Long = 1000
' The following line of code sets testNewType to 1000.0.
Dim testNewType As Single = CType(testNumber, Single)
Para obtener otros ejemplos, vea Conversiones implícita y explícita (Visual Basic).