Compartilhar via


Funções de conversão de tipo (Visual Basic)

Essas funções são compiladas embutidas, o que significa que o código de conversão faz parte do código que avalia a expressão. Às vezes, não há nenhuma chamada para um procedimento para realizar a conversão, o que melhora o desempenho. Cada função coagi uma expressão a um tipo de dados específico.

Sintaxe

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
Obrigatório Qualquer expressão do tipo de dados de origem.

Tipo de dados de valor retornado

O nome da função determina o tipo de dados do valor retornado, conforme mostrado na tabela a seguir.

Nome da função Tipo de dados de retorno Intervalo para expression argumento
CBool Tipo de dados booliano Qualquer expressão válida Char ou String numérica.
CByte Tipo de Dados Byte Byte.MinValue (0) até Byte.MaxValue (255) (sem sinal); partes fracionárias são arredondadas.1

A partir do Visual Basic 15.8, o Visual Basic otimiza o desempenho da conversão de ponto flutuante para bytes com a CByte função; consulte a seção Comentários para obter mais informações. Consulte a seção Exemplo de CInt para obter um exemplo.
CChar Tipo de dados Char Qualquer expressão ou Char válidaString; somente o primeiro caractere de um String é convertido; o valor pode ser de 0 a 65535 (sem sinal).
CDate Tipo de Dados de Data Qualquer representação válida de uma data e hora.
CDbl Tipo de dados duplo -1.79769313486231570E+308 a -4.94065645841246544E-324 para valores negativos; 4.94065645841246544E-324 a 1.79769313486231570E+308 para valores positivos.
CDec Tipo de dados decimal +/-79.228.162.514.264.337.593.543.950.335 para números de escala zero, ou seja, números sem casas decimais. Para números com 28 casas decimais, o intervalo é +/-7.9228162514264337593543950335. O menor número diferente de zero possível é 0,00000000000000000000000000001 (+/-1E-28).
CInt Tipo de dados inteiro Int32.MinValue (-2.147.483.648) até Int32.MaxValue (2.147.483.647); as partes fracionárias são arredondadas.1

A partir do Visual Basic 15.8, o Visual Basic otimiza o desempenho da conversão de ponto flutuante para inteiro com a CInt função; consulte a seção Comentários para obter mais informações. Consulte a seção Exemplo de CInt para obter um exemplo.
CLng Tipo de Dados Long Int64.MinValue (-9.223.372.036.854.775.808) até Int64.MaxValue (9.223.372.036.854.775.807); as partes fracionárias são arredondadas.1

A partir do Visual Basic 15.8, o Visual Basic otimiza o desempenho da conversão de inteiros de ponto flutuante para 64 CLng com a função; consulte a seção Comentários para obter mais informações. Consulte a seção Exemplo de CInt para obter um exemplo.
CObj Tipo de Dados de Objeto Qualquer expressão válida.
CSByte Tipo de dados SByte SByte.MinValue (-128) até SByte.MaxValue (127); partes fracionárias são arredondadas.1

A partir do Visual Basic 15.8, o Visual Basic otimiza o desempenho da conversão de ponto flutuante para bytes assinados com a CSByte função; consulte a seção Comentários para obter mais informações. Consulte a seção Exemplo de CInt para obter um exemplo.
CShort Tipo de dados curto Int16.MinValue (-32.768) a Int16.MaxValue (32.767); partes fracionárias são arredondadas.1

A partir do Visual Basic 15.8, o Visual Basic otimiza o desempenho da conversão de inteiros de ponto flutuante para 16 CShort com a função; consulte a seção Comentários para obter mais informações. Consulte a seção Exemplo de CInt para obter um exemplo.
CSng Tipo de dados único -3.402823E+38 a -1.401298E-45 para valores negativos; 1,401298E-45 a 3,402823E+38 para valores positivos.
CStr Tipo de dados de cadeia de caracteres Retorna para CStr depender do expression argumento. Consulte valores retornados para a função CStr.
CUInt Tipo de dados UInteger UInt32.MinValue (0) até UInt32.MaxValue (4.294.967.295) (sem sinal); partes fracionárias são arredondadas.1

A partir do Visual Basic 15.8, o Visual Basic otimiza o desempenho do ponto flutuante para conversão de inteiro sem sinal com a CUInt função; consulte a seção Comentários para obter mais informações. Consulte a seção Exemplo de CInt para obter um exemplo.
CULng Tipo de Dados ULong UInt64.MinValue (0) até UInt64.MaxValue (18.446.744.073.709.551.615) (sem sinal); as partes fracionárias são arredondadas.1

A partir do Visual Basic 15.8, o Visual Basic otimiza o desempenho do ponto flutuante para conversão de inteiros longos sem sinal com a CULng função; consulte a seção Comentários para obter mais informações. Consulte a seção Exemplo de CInt para obter um exemplo.
CUShort Tipo de Dados UShort UInt16.MinValue (0) até UInt16.MaxValue (65.535) (sem sinal); partes fracionárias são arredondadas.1

A partir do Visual Basic 15.8, o Visual Basic otimiza o desempenho do ponto flutuante para a conversão de inteiros de 16 bits sem sinal com a CUShort função; consulte a seção Comentários para obter mais informações. Consulte a seção Exemplo de CInt para obter um exemplo.

1 Partes fracionárias podem estar sujeitas a um tipo especial de arredondamento chamado arredondamento do banqueiro. Consulte "Comentários" para obter mais informações.

Observações

Como regra, você deve usar as funções de conversão de tipo do Visual Basic em preferência aos métodos do .NET Framework, como ToString(), na Convert classe ou em uma estrutura ou classe de tipo individual. As funções do Visual Basic são projetadas para uma interação ideal com o código do Visual Basic e também tornam o código-fonte mais curto e fácil de ler. Além disso, os métodos de conversão do .NET Framework nem sempre produzem os mesmos resultados que as funções do Visual Basic, por exemplo, ao converter Boolean em Integer. Para obter mais informações, consulte Solucionar problemas de tipos de dados.

A partir do Visual Basic 15.8, o desempenho da conversão ponto a inteiro flutuante é otimizado quando você passa o valor ou o Single valor retornado pelos métodos a seguir para uma das funções de conversão de inteiro (Double, , CByte, CShort, CInt, CLng, CSByte, CUShortCUInt):CULng

Essa otimização permite que o código que faz um grande número de conversões de inteiros seja executado até duas vezes mais rápido. O exemplo a seguir ilustra estas conversões otimizadas de ponto para inteiro flutuante:

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

Comportamento

  • Coerção. Em geral, você pode usar as funções de conversão de tipo de dados para coagir o resultado de uma operação a um tipo de dados específico em vez do tipo de dados padrão. Por exemplo, use CDec para forçar a aritmética decimal em casos em que a aritmética de precisão única, precisão dupla ou inteiro normalmente ocorreria.

  • Conversões com falha. Se a expression passagem para a função estiver fora do intervalo do tipo de dados para o qual ela deve ser convertida, ocorrerá uma OverflowException .

  • Partes fracionárias. Quando você converte um valor nonintegral em um tipo integral, as funções de conversão de inteiro (CByte, , CInt, CLng, CSByte, CShort, , CUInte CULng) removem a parte fracionária e CUShortarredondam o valor para o inteiro mais próximo.

    Se a parte fracionária for exatamente 0,5, as funções de conversão de inteiro arredondarão para o inteiro mais próximo. Por exemplo, 0,5 arredonda para 0 e 1,5 e 2,5, ambos arredondados para 2. Isso às vezes é chamado de arredondamento do banqueiro, e seu propósito é compensar um viés que poderia se acumular ao adicionar muitos desses números juntos.

    CInt e CLng diferem das Int funções e Fix , que truncam, em vez de arredondar, a parte fracionária de um número. Além disso, Fix e Int sempre retorne um valor do mesmo tipo de dados que você passa.

  • Conversões de data/hora. Use a IsDate função para determinar se um valor pode ser convertido em uma data e hora. CDate reconhece literais de data e literais de hora, mas não valores numéricos. Para converter um valor do Visual Basic 6.0 Date em um Date valor no Visual Basic 2005 ou versões posteriores, você pode usar o DateTime.FromOADate método.

  • Valores neutros de data/hora. O Tipo de Dados de Data sempre contém informações de data e hora. Para fins de conversão de tipo, o Visual Basic considera 1/1/0001 (1º de janeiro do ano 1) como um valor neutro para a data e 00:00:00 (meia-noite) como um valor neutro para a hora. Se você converter um Date valor em uma cadeia de caracteres, CStr não inclui valores neutros na cadeia de caracteres resultante. Por exemplo, se você converter #January 1, 0001 9:30:00# em uma cadeia de caracteres, o resultado será "9:30:00 AM"; as informações de data serão suprimidas. No entanto, as informações de data ainda estão presentes no valor original Date e podem ser recuperadas com funções como DatePart função.

  • Sensibilidade à cultura. As funções de conversão de tipo que envolvem cadeias de caracteres executam conversões com base nas configurações de cultura atuais do aplicativo. Por exemplo, CDate reconhece formatos de data de acordo com a configuração de localidade do sistema. Você deve fornecer o dia, o mês e o ano na ordem correta para sua localidade ou a data pode não ser interpretada corretamente. Um formato de data longa não será reconhecido se ele contiver uma cadeia de caracteres do dia da semana, como "Quarta-feira".

    Se você precisar converter de ou para uma representação de cadeia de caracteres de um valor em um formato diferente do especificado pela localidade, não poderá usar as funções de conversão de tipo do Visual Basic. Para fazer isso, use os métodos e ToString(IFormatProvider) o Parse(String, IFormatProvider) tipo desse valor. Por exemplo, use Double.Parse ao converter uma cadeia de caracteres em um Doublee use Double.ToString ao converter um valor de tipo Double em uma cadeia de caracteres.

Operador CType

O Operador CType usa um segundo argumento typename, e coagi expression a typename, onde typename pode ser qualquer tipo de dados, estrutura, classe ou interface para o qual existe uma conversão válida.

Para obter uma comparação de CType com as outras palavras-chave de conversão de tipo, consulte o Operador DirectCast e o Operador TryCast.

Exemplo de CBool

O exemplo a seguir usa a CBool função para converter expressões em Boolean valores. Se uma expressão for avaliada como um valor diferente de zero, CBool retornará True; caso contrário, retornará 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)

Exemplo de CByte

O exemplo a seguir usa a CByte função para converter uma expressão em um Byte.

Dim aDouble As Double
Dim aByte As Byte
aDouble = 125.5678
' The following line of code sets aByte to 126.
aByte = CByte(aDouble)

Exemplo de CChar

O exemplo a seguir usa a CChar função para converter o primeiro caractere de uma String expressão em um 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)

O argumento de entrada deve CChar ser do tipo Char de dados ou String. Você não pode usar CChar para converter um número em um caractere, porque CChar não é possível aceitar um tipo de dados numérico. O exemplo a seguir obtém um número que representa um ponto de código (código de caractere) e o converte no caractere correspondente. Ele usa a InputBox função para obter a cadeia de caracteres de dígitos, CInt converter a cadeia de caracteres em tipo Integere ChrW converter o número em 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)

Exemplo de CDate

O exemplo a seguir usa a CDate função para converter cadeias de caracteres em Date valores. Em geral, não é recomendável codificar datas e horas como cadeias de caracteres (conforme mostrado neste exemplo). Use literais de data e literais de hora, como #Feb 12, 1969# e #4:45:23 PM#, em vez disso.

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)

Exemplo 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)

Exemplo de CDec

O exemplo a seguir usa a CDec função para converter um valor Decimalnumérico em .

Dim aDouble As Double
Dim aDecimal As Decimal
aDouble = 10000000.0587
' The following line of code sets aDecimal to 10000000.0587.
aDecimal = CDec(aDouble)

Exemplo de CInt

O exemplo a seguir usa a CInt função para converter um valor Integerem .

Dim aDbl As Double
Dim anInt As Integer
aDbl = 2345.5678
' The following line of code sets anInt to 2346.
anInt = CInt(aDbl)

Exemplo de CLng

O exemplo a seguir usa a CLng função para converter valores Longem .

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)

Exemplo de CObj

O exemplo a seguir usa a CObj função para converter um valor Objectnumérico em . A Object variável em si contém apenas um ponteiro de quatro bytes, que aponta para o Double valor atribuído a ela.

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)

Exemplo de CSByte

O exemplo a seguir usa a CSByte função para converter um valor SBytenumérico em .

Dim aDouble As Double
Dim anSByte As SByte
aDouble = 39.501
' The following line of code sets anSByte to 40.
anSByte = CSByte(aDouble)

Exemplo de CShort

O exemplo a seguir usa a CShort função para converter um valor Shortnumérico em .

Dim aByte As Byte
Dim aShort As Short
aByte = 100
' The following line of code sets aShort to 100.
aShort = CShort(aByte)

Exemplo de CSng

O exemplo a seguir usa a CSng função para converter valores Singleem .

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)

Exemplo de CStr

O exemplo a seguir usa a CStr função para converter um valor Stringnumérico em .

Dim aDouble As Double
Dim aString As String
aDouble = 437.324
' The following line of code sets aString to "437.324".
aString = CStr(aDouble)

O exemplo a seguir usa a CStr função para converter Date valores em 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 sempre renderiza um Date valor no formato curto padrão para a localidade atual, por exemplo, "15/6/2003 4:35:47 PM". No entanto, CStr suprime os valores neutros de 1/1/0001 para a data e 00:00:00 para a hora.

Para obter mais detalhes sobre os valores retornados, CStrconsulte Valores retornados para a função CStr.

Exemplo cuint

O exemplo a seguir usa a CUInt função para converter um valor UIntegernumérico em .

Dim aDouble As Double
Dim aUInteger As UInteger
aDouble = 39.501
' The following line of code sets aUInteger to 40.
aUInteger = CUInt(aDouble)

Exemplo de CULng

O exemplo a seguir usa a CULng função para converter um valor ULongnumérico em .

Dim aDouble As Double
Dim aULong As ULong
aDouble = 39.501
' The following line of code sets aULong to 40.
aULong = CULng(aDouble)

Exemplo de CUShort

O exemplo a seguir usa a CUShort função para converter um valor UShortnumérico em .

Dim aDouble As Double
Dim aUShort As UShort
aDouble = 39.501
' The following line of code sets aUShort to 40.
aUShort = CUShort(aDouble)

Consulte também