Como converter uma cadeia de caracteres em um número (Guia de Programação em C#)
Converta um string
em um número chamando o método Parse
ou TryParse
encontrado em tipos numéricos (int
, long
, double
e assim por diante) ou usando métodos na classe System.Convert.
Será um pouco mais eficiente e simples chamar um método TryParse
(por exemplo, int.TryParse("11", out number)
) ou o método Parse
(por exemplo, var number = int.Parse("11")
). Usar um método Convert é mais útil para objetos gerais que implementam IConvertible.
É possível usar métodos Parse
ou TryParse
no tipo numérico que se espera que a cadeia de caracteres contenha, como o tipo System.Int32. O método Convert.ToInt32 usa Parse internamente. O método Parse
retorna o número convertido; o método TryParse
retorna um valor booliano que indica se a conversão foi bem-sucedida e retorna o número convertido em um parâmetro out
. Se a cadeia de caracteres não estiver em um formato válido, Parse
lançará uma exceção, mas TryParse
retornará false
. Ao chamar um método Parse
, você sempre deve usar o tratamento de exceções para capturar um FormatException quando a operação de análise falhar.
Chamar métodos Parse ou TryParse
Os métodos Parse
e TryParse
ignoram o espaço em branco no início e no final da cadeia de caracteres; porém, todos os outros caracteres devem formar o tipo numérico correto (int
, long
, ulong
, float
, decimal
e assim por diante). Qualquer espaço em branco na cadeia de caracteres que forma o número causa um erro. Por exemplo, é possível usar decimal.TryParse
para analisar "10", "10,3" ou " 10 ", mas não é possível usar esse método para analisar 10 de "10X", "1 0" (observe o espaço inserido), "10 .3" (observe o espaço inserido), "10e1" (float.TryParse
funcionará neste caso) e assim por diante. Uma cadeia de caracteres cujo valor seja null
ou String.Empty falhará ao ser analisada com êxito. Você pode verificar uma cadeia de caracteres nula ou vazia antes de tentar analisá-la chamando o método String.IsNullOrEmpty.
O exemplo a seguir demonstra chamadas com e sem êxito para Parse
e TryParse
.
using System;
public static class StringConversion
{
public static void Main()
{
string input = String.Empty;
try
{
int result = Int32.Parse(input);
Console.WriteLine(result);
}
catch (FormatException)
{
Console.WriteLine($"Unable to parse '{input}'");
}
// Output: Unable to parse ''
try
{
int numVal = Int32.Parse("-105");
Console.WriteLine(numVal);
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
// Output: -105
if (Int32.TryParse("-105", out int j))
{
Console.WriteLine(j);
}
else
{
Console.WriteLine("String could not be parsed.");
}
// Output: -105
try
{
int m = Int32.Parse("abc");
}
catch (FormatException e)
{
Console.WriteLine(e.Message);
}
// Output: Input string was not in a correct format.
const string inputString = "abc";
if (Int32.TryParse(inputString, out int numValue))
{
Console.WriteLine(numValue);
}
else
{
Console.WriteLine($"Int32.TryParse could not parse '{inputString}' to an int.");
}
// Output: Int32.TryParse could not parse 'abc' to an int.
}
}
O exemplo a seguir ilustra uma abordagem para analisar uma cadeia de caracteres que deve incluir caracteres numéricos à esquerda (incluindo caracteres hexadecimais) e caracteres não numéricos à direita. Ele atribui caracteres válidos do início de uma cadeia de caracteres até uma nova cadeia de caracteres antes de chamar o método TryParse. Como as cadeias de caracteres a ser analisadas contêm poucos caracteres, o exemplo chama o método String.Concat para atribuir os caracteres válidos a uma nova cadeia de caracteres. Para cadeias de caracteres maiores, pode ser usada a classe StringBuilder.
using System;
public static class StringConversion
{
public static void Main()
{
var str = " 10FFxxx";
string numericString = string.Empty;
foreach (var c in str)
{
// Check for numeric characters (hex in this case) or leading or trailing spaces.
if ((c >= '0' && c <= '9') || (char.ToUpperInvariant(c) >= 'A' && char.ToUpperInvariant(c) <= 'F') || c == ' ')
{
numericString = string.Concat(numericString, c.ToString());
}
else
{
break;
}
}
if (int.TryParse(numericString, System.Globalization.NumberStyles.HexNumber, null, out int i))
{
Console.WriteLine($"'{str}' --> '{numericString}' --> {i}");
}
// Output: ' 10FFxxx' --> ' 10FF' --> 4351
str = " -10FFXXX";
numericString = "";
foreach (char c in str)
{
// Check for numeric characters (0-9), a negative sign, or leading or trailing spaces.
if ((c >= '0' && c <= '9') || c == ' ' || c == '-')
{
numericString = string.Concat(numericString, c);
}
else
{
break;
}
}
if (int.TryParse(numericString, out int j))
{
Console.WriteLine($"'{str}' --> '{numericString}' --> {j}");
}
// Output: ' -10FFXXX' --> ' -10' --> -10
}
}
Chamar métodos Convert
A tabela a seguir lista alguns dos métodos da classe Convert que podem ser usados para converter uma cadeia de caracteres em um número.
Tipo numérico | Método |
---|---|
decimal |
ToDecimal(String) |
float |
ToSingle(String) |
double |
ToDouble(String) |
short |
ToInt16(String) |
int |
ToInt32(String) |
long |
ToInt64(String) |
ushort |
ToUInt16(String) |
uint |
ToUInt32(String) |
ulong |
ToUInt64(String) |
O exemplo a seguir chama o método Convert.ToInt32(String) para converter uma cadeia de caracteres de entrada em um int. O exemplo captura as duas exceções mais comuns geradas por esse método: FormatException e OverflowException. Se o número resultante puder ser incrementado sem exceder Int32.MaxValue, o exemplo adicionará 1 ao resultado e exibirá a saída.
using System;
public class ConvertStringExample1
{
static void Main(string[] args)
{
int numVal = -1;
bool repeat = true;
while (repeat)
{
Console.Write("Enter a number between −2,147,483,648 and +2,147,483,647 (inclusive): ");
string? input = Console.ReadLine();
// ToInt32 can throw FormatException or OverflowException.
try
{
numVal = Convert.ToInt32(input);
if (numVal < Int32.MaxValue)
{
Console.WriteLine("The new value is {0}", ++numVal);
}
else
{
Console.WriteLine("numVal cannot be incremented beyond its current value");
}
}
catch (FormatException)
{
Console.WriteLine("Input string is not a sequence of digits.");
}
catch (OverflowException)
{
Console.WriteLine("The number cannot fit in an Int32.");
}
Console.Write("Go again? Y/N: ");
string? go = Console.ReadLine();
if (go?.ToUpper() != "Y")
{
repeat = false;
}
}
}
}
// Sample Output:
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 473
// The new value is 474
// Go again? Y/N: y
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): 2147483647
// numVal cannot be incremented beyond its current value
// Go again? Y/N: y
// Enter a number between -2,147,483,648 and +2,147,483,647 (inclusive): -1000
// The new value is -999
// Go again? Y/N: n
Usar o GitHub Copilot para converter uma string em um número
Você pode usar o GitHub Copilot no IDE para gerar código para converter uma string em um número em C#.
Se você estiver usando o Visual Studio 2022 versão 17.8 ou posterior, poderá experimentar o GitHub Copilot controlado por IA no Visual Studio para gerar código para converter uma cadeia de caracteres em um número. Envie sua pergunta como um prompt na janela de bate-papo do Copilot, como no exemplo a seguir. Você também pode enviar prompts usando o bate-papo em linha na própria janela do editor.
Observação
O GitHub Copilot é alimentado por IA, portanto é passível de surpresas e erros. Verifique qualquer código gerado ou sugestões. Para obter mais informações sobre o uso geral do GitHub Copilot, o impacto do produto, a supervisão humana e a privacidade, consulte Perguntas frequentes sobre o GitHub Copilot.
O texto a seguir mostra um exemplo de prompt para o Copilot Chat:
Gere código C# para converter a cadeia de caracteres "123" em um número usando TryParse. Forneça um exemplo de saída.
Você pode personalizar o prompt para usar uma cadeia de caracteres de acordo com seus requisitos.
Você pode usar recursos de bate-papo, como comandos de barra, referências a arquivos, métodos ou classes e threads, para definir a intenção e obter melhores respostas com o contexto com escopo. Para um arquivo existente que está aberto no IDE, você pode solicitar o GitHub Copilot usando o chat embutido com /generate code to convert the string string1 in #Filename to a number
o .
A saída a seguir mostra um exemplo de resposta do Copilot Chat:
Here is a C# code snippet to convert the string "123" to a number using TryParse:
using System;
class Program
{
static void Main()
{
string numberString = "123";
int number;
bool success = int.TryParse(numberString, out number);
if (success)
{
// Example output
Console.WriteLine("The converted number is: " + number);
}
else
{
Console.WriteLine("Conversion failed.");
}
}
}
When you run this code, the output will be:
The converted number is: 123
Quando o Copilot retorna um bloco de código, a resposta inclui opções para copiar o código, inserir o código em um novo arquivo ou visualizar a saída do código.
Observação
Seus resultados podem ser diferentes do que é mostrado nas respostas de exemplo. Os modelos de IA não são determinísticos, ou seja, eles podem retornar respostas diferentes quando fazem a mesma pergunta. Isso pode ser devido a aprendizado e adaptação adicionais ao longo do tempo, variação de idioma, mudanças no contexto, como seu histórico de bate-papo e muito mais.
Para saber mais, veja: