Como posso converter String para Int?

638

Eu tenho um TextBoxD1.Texte quero convertê-lo em um intpara armazená-lo em um banco de dados.

Como posso fazer isso?

turki2009
fonte

Respostas:

1038

Tente o seguinte:

int x = Int32.Parse(TextBoxD1.Text);

ou melhor ainda:

int x = 0;

Int32.TryParse(TextBoxD1.Text, out x);

Além disso, como Int32.TryParseretorna a, boolvocê pode usar seu valor de retorno para tomar decisões sobre os resultados da tentativa de análise:

int x = 0;

if (Int32.TryParse(TextBoxD1.Text, out x))
{
    // you know that the parsing attempt
    // was successful
}

Se você estiver curioso, a diferença entre Parsee TryParseé melhor resumida da seguinte forma:

O método TryParse é como o método Parse, exceto o método TryParse não lança uma exceção se a conversão falhar. Isso elimina a necessidade de usar o tratamento de exceções para testar uma FormatException no caso de s ser inválido e não poder ser analisado com êxito. - MSDN

Andrew Hare
fonte
3
E se o número inteiro for de 64 bits ou se parecer com "aslkdlksadjsd"? Isso ainda é seguro?
Jonny
6
@Jonny Int64.Parse(). Se a entrada não for int, você receberá uma execução e um rastreamento de pilha com Int64.Parseou o booleano Falsecom Int64.TryParse(), portanto, você precisará de uma instrução if, como if (Int32.TryParse(TextBoxD1.Text, out x)) {}.
1
Você também pode tentar inicializar a variável no TryParse se ela for usada apenas dentro da condição de sucesso. Por exemplo: Int32.TryParse (TextBoxD1.Text, out int x))
simplysiby
5
Talvez isso seja incrivelmente óbvio para todos os outros, mas para as pessoas noobish o que 'out x' faz é definir o valor de x como string-cast-como-inteiro, se a conversão for bem-sucedida. Ou seja, nesse caso, x = 0 se a sequência tiver caracteres não inteiros ou x = valor da sequência como inteiro, caso contrário. Portanto, o mais interessante é que essa é uma expressão curta que informa se a conversão é bem-sucedida ou não, e armazena o número inteiro da conversão em uma variável ao mesmo tempo. Obviamente, você frequentemente desejaria continuar acima da linha com 'else {// string analisada não é um número inteiro, portanto, algum código para lidar com essa situação}'
Will Croxford
@ Roberto ok, mas é possível que o usuário (por engano ou intencionalmente) digite o valor "aslkdlksadjsd" dentro de uma caixa de texto! então nosso programa deve falhar?
precisa saber é o seguinte
55
Convert.ToInt32( TextBoxD1.Text );

Use isso se tiver certeza de que o conteúdo da caixa de texto é válido int. Uma opção mais segura é

int val = 0;
Int32.TryParse( TextBoxD1.Text, out val );

Isso fornecerá algum valor padrão que você pode usar. Int32.TryParsetambém retorna um valor booleano indicando se foi capaz de analisar ou não, para que você possa usá-lo como condição de uma ifinstrução.

if( Int32.TryParse( TextBoxD1.Text, out val ){
  DoSomething(..);
} else {
  HandleBadInput(..);
}
Babak Naffas
fonte
-1 RE. "Isso fornecerá algum valor padrão que você pode usar." Se você quer dizer val, espere um problema: "Este parâmetro é passado sem inicializar; qualquer valor originalmente fornecido no resultado será substituído." [Ref. docs.microsoft.com/en-us/dotnet/api/… ]
Zeek2 14/06/19
6
10 anos atrás, eu me desculpo.
21719 Babak Naffas
37
int.TryParse()

Não será lançado se o texto não for numérico.

n8wrl
fonte
Isso é melhor que os outros dois. É provável que a entrada do usuário esteja no formato errado. Este é mais eficiente do que usar o tratamento de exceções, como os outros exigem.
UncleO
Exatamente. Retorna false se a conversão falhar.
N8wrl 19/06/09
21
int myInt = int.Parse(TextBoxD1.Text)

Outra maneira seria:

bool isConvertible = false;
int myInt = 0;

isConvertible = int.TryParse(TextBoxD1.Text, out myInt);

A diferença entre os dois é que o primeiro lançaria uma exceção se o valor na sua caixa de texto não puder ser convertido, enquanto o segundo retornaria falso.

Andre Kraemer
fonte
A variável booleana acima é muito útil, pois estamos usando o valor convertido para comaprison, digamos em uma cláusula if. code int NumericJL; bool isNum = int.TryParse (nomeeJobBand, out NumericJL); if (isNum) // O JL retured é capaz de passar para int e, em seguida, prossegue para a comparação {if (! (NumericJL> = 6)) {// Nomear} // else {}}
baymax
16

Você precisa analisar a sequência e também garantir que ela esteja realmente no formato de um número inteiro.

A maneira mais fácil é esta:

int parsedInt = 0;
if (int.TryParse(TextBoxD1.Text, out parsedInt))
{
   // Code for if the string was valid
}
else
{
   // Code for if the string was invalid
}
Jacob
fonte
14

Tenha cuidado ao usar Convert.ToInt32 () em um char!
Ele retornará o UTF-16 código do personagem!

Se você acessar a sequência apenas em uma determinada posição usando o [i]operador de indexação, ela retornará a chare não a string!

String input = "123678";
                    ^
                    |
int indexOfSeven =  4;

int x = Convert.ToInt32(input[indexOfSeven]);             // Returns 55

int x = Convert.ToInt32(input[indexOfSeven].toString());  // Returns 7
Mong Zhu
fonte
11
int x = 0;
int.TryParse(TextBoxD1.Text, out x);

A instrução TryParse retorna um booleano representando se a análise foi bem-sucedida ou não. Se for bem-sucedido, o valor analisado é armazenado no segundo parâmetro.

Consulte Método Int32.TryParse (String, Int32) para obter informações mais detalhadas.

jorelli
fonte
11

Aproveite...

int i = 0;
string s = "123";
i =int.Parse(s);
i = Convert.ToInt32(s);
Salim Latif Waigaonkar
fonte
10

Embora já existam muitas soluções aqui que descrevem int.Parse , há algo importante faltando em todas as respostas. Normalmente, as representações de cadeia de valores numéricos diferem por cultura. Elementos de seqüências numéricas, como símbolos de moeda, separadores de grupos (ou milhares) e separadores decimais, variam de acordo com a cultura.

Se você deseja criar uma maneira robusta de analisar uma string em um número inteiro, é importante levar em consideração as informações da cultura. Caso contrário, as configurações de cultura atuais serão usadas. Isso pode dar ao usuário uma surpresa bastante desagradável - ou pior ainda, se você estiver analisando os formatos de arquivo. Se você deseja apenas analisar o inglês, é melhor simplesmente explicitar, especificando as configurações de cultura a serem usadas:

var culture = CultureInfo.GetCulture("en-US");
int result = 0;
if (int.TryParse(myString, NumberStyles.Integer, culture, out result))
{
    // use result...
}

Para obter mais informações, leia CultureInfo, especificamente NumberFormatInfo no MSDN.

atlaste
fonte
8

Você pode escrever seu próprio método de extensão

public static class IntegerExtensions
{
    public static int ParseInt(this string value, int defaultValue = 0)
    {
        int parsedValue;
        if (int.TryParse(value, out parsedValue))
        {
            return parsedValue;
        }

        return defaultValue;
    }

    public static int? ParseNullableInt(this string value)
    {
        if (string.IsNullOrEmpty(value))
        {
            return null;
        }

        return value.ParseInt();
    }
}

E em qualquer lugar no código, basta ligar

int myNumber = someString.ParseInt(); // Returns value or 0
int age = someString.ParseInt(18); // With default value 18
int? userId = someString.ParseNullableInt(); // Returns value or null

Neste caso concreto

int yourValue = TextBoxD1.Text.ParseInt();
Miroslav Holec
fonte
A classe não deve ser chamada em StringExtensionsvez de IntegerExtensions, uma vez que esses métodos de extensão atuam sobre stringe não sobre int?
Shiva
7

Conforme explicado na documentação do TryParse , TryParse () retorna um booleano que indica que um número válido foi encontrado:

bool success = Int32.TryParse(TextBoxD1.Text, out val);

if (success)
{
    // Put val in database
}
else
{
    // Handle the case that the string doesn't contain a valid number
}
JeffH
fonte
7
int x = Int32.TryParse(TextBoxD1.Text, out x) ? x : 0;
Mohammad Rahman
fonte
Conciso e fornece padrão 👍
Zeek2
6

Você pode usar

int i = Convert.ToInt32(TextBoxD1.Text);

ou

int i = int.Parse(TextBoxD1.Text);
Impasse
fonte
Como isso é diferente das respostas anteriores?
Peter Mortensen
5
//May be quite some time ago but I just want throw in some line for any one who may still need it

int intValue;
string strValue = "2021";

try
{
    intValue = Convert.ToInt32(strValue);
}
catch
{
    //Default Value if conversion fails OR return specified error
    // Example 
    intValue = 2000;
}
Jsprings
fonte
A falta de padronização neste caso não seria uma boa ideia. Se a inadimplência for crucial, recomendo retornar 0. #
Prageeth Saravanan
5

Você pode converter uma string para int em C # usando:

Funções de classe convertido ou seja Convert.ToInt16(), Convert.ToInt32(), Convert.ToInt64()ou por utilização Parsee TryParsefunções. Exemplos são dados aqui .

Atif
fonte
Como isso é diferente das respostas anteriores?
Peter Mortensen
4

Você também pode usar um método de extensão , para que seja mais legível (embora todo mundo já esteja acostumado às funções regulares do Parse).

public static class StringExtensions
{
    /// <summary>
    /// Converts a string to int.
    /// </summary>
    /// <param name="value">The string to convert.</param>
    /// <returns>The converted integer.</returns>
    public static int ParseToInt32(this string value)
    {
        return int.Parse(value);
    }

    /// <summary>
    /// Checks whether the value is integer.
    /// </summary>
    /// <param name="value">The string to check.</param>
    /// <param name="result">The out int parameter.</param>
    /// <returns>true if the value is an integer; otherwise, false.</returns>
    public static bool TryParseToInt32(this string value, out int result)
    {
        return int.TryParse(value, out result);
    }
}

E então você pode chamar assim:

  1. Se você tem certeza de que sua string é um número inteiro, como "50".

    int num = TextBoxD1.Text.ParseToInt32();
  2. Se você não tem certeza e deseja evitar falhas.

    int num;
    if (TextBoxD1.Text.TryParseToInt32(out num))
    {
        //The parse was successful, the num has the parsed value.
    }

Para torná-lo mais dinâmico, você também pode analisá-lo para dobrar, flutuar etc., criando uma extensão genérica.

Misha Zaslavsky
fonte
4

Conversão stringda intpode ser feito por: int, Int32, Int64e outros tipos de dados que reflete os tipos de dados inteiros em .NET

O exemplo abaixo mostra esta conversão:

Este elemento do adaptador de dados show (for info) foi inicializado com o valor int. O mesmo pode ser feito diretamente como,

int xxiiqVal = Int32.Parse(strNabcd);

Ex.

string strNii = "";
UsrDataAdapter.SelectCommand.Parameters["@Nii"].Value = Int32.Parse(strNii );

Link para ver esta demonstração .

Edwin b
fonte
4

Isso faria

string x = TextBoxD1.Text;
int xi = Convert.ToInt32(x);

Ou você pode usar

int xi = Int32.Parse(x);

Consulte Microsoft Developer Network para obter mais informações

Paddler
fonte
Como isso é diferente das respostas anteriores?
Peter Mortensen
4

Você pode fazer o seguinte abaixo sem as funções TryParse ou embutidas:

static int convertToInt(string a)
{
    int x = 0;
    for (int i = 0; i < a.Length; i++)
    {
        int temp = a[i] - '0';
        if (temp != 0)
        {
            x += temp * (int)Math.Pow(10, (a.Length - (i+1)));
        }
    }
    return x;
}
lazydeveloper
fonte
convertToInt ( "1234") dá 10000 ...... se você estiver indo para copiar a resposta de outra pessoa, pelo menos copiar a coisa toda
SerenityNow
não me compare com você mesmo .. adicionar solução atualizado em vez .. lol
lazydeveloper
@SerenityAgora você pode conferir agora. Foi um erro de digitação.
Lazydeveloper 11/0418
1
referindo-se ao seu ID, um desenvolvedor- preguiçoso não criará esse método! ; D good
S.Serpooshan
3
int i = Convert.ToInt32(TextBoxD1.Text);
deepu
fonte
Uma explicação estaria em ordem. Por exemplo, como é diferente da resposta de Babak Naffas ?
Peter Mortensen
2

Você pode converter string em um valor inteiro com a ajuda do método de análise.

Por exemplo:

int val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);
Codemaker
fonte
Como isso é diferente das respostas anteriores?
Peter Mortensen
2

A maneira como sempre faço isso é assim:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace example_string_to_int
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            string a = textBox1.Text;
            // This turns the text in text box 1 into a string
            int b;
            if (!int.TryParse(a, out b))
            {
                MessageBox.Show("This is not a number");
            }
            else
            {
                textBox2.Text = a+" is a number" ;
            }
            // Then this 'if' statement says if the string is not a number, display an error, else now you will have an integer.
        }
    }
}

É assim que eu faria.

Isaac Newton
fonte
0

Se você está procurando o caminho mais longo, crie seu único método:

static int convertToInt(string a)
    {
        int x = 0;

        Char[] charArray = a.ToCharArray();
        int j = charArray.Length;

        for (int i = 0; i < charArray.Length; i++)
        {
            j--;
            int s = (int)Math.Pow(10, j);

            x += ((int)Char.GetNumericValue(charArray[i]) * s);
        }
        return x;
    }
jul taps
fonte
0

MÉTODO 1

int  TheAnswer1 = 0;
bool Success = Int32.TryParse("42", out TheAnswer1);
if (!Success) {
    Console.WriteLine("String not Convertable to an Integer");
}

MÉTODO 2

int TheAnswer2 = 0;
try {
    TheAnswer2 = Int32.Parse("42");
}
catch {
    Console.WriteLine("String not Convertable to an Integer");
}

MÉTODO 3

int TheAnswer3 = 0;
try {
    TheAnswer3 = Int32.Parse("42");
}
catch (FormatException) {
    Console.WriteLine("String not in the correct format for an Integer");
}
catch (ArgumentNullException) {
    Console.WriteLine("String is null");
}
catch (OverflowException) {
    Console.WriteLine("String represents a number less than"
                      + "MinValue or greater than MaxValue");
}
Bill Moore
fonte
0

Este código funciona para mim no Visual Studio 2010:

int someValue = Convert.ToInt32(TextBoxD1.Text);
Sarib Shamim
fonte
Sim, mas como é diferente das respostas anteriores?
Peter Mortensen
0

Isso funciona para mim:

using System;

namespace numberConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            string numberAsString = "8";
            int numberAsInt = int.Parse(numberAsString);
        }
    }
}
Sheridan Irvine
fonte
Uma explicação estaria em ordem.
Peter Mortensen
0

Você pode tentar o seguinte. Vai funcionar:

int x = Convert.ToInt32(TextBoxD1.Text);

O valor da string na variável TextBoxD1.Text será convertido em Int32 e será armazenado em x.

Kartikey Kushwaha
fonte
0

No C # v.7, você poderia usar um parâmetro inline out, sem uma declaração adicional de variável:

int.TryParse(TextBoxD1.Text, out int x);
Max Miller
fonte
Os outparâmetros não são desencorajados em C # agora?
Peter Mortensen
-3

Isso pode ajudá-lo; D

{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        float Stukprijs;
        float Aantal;
        private void label2_Click(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("In de eersre textbox staat een geldbedrag." + Environment.NewLine + "In de tweede textbox staat een aantal." + Environment.NewLine + "Bereken wat er moetworden betaald." + Environment.NewLine + "Je krijgt 15% korting over het bedrag BOVEN de 100." + Environment.NewLine + "Als de korting meer dan 10 euri is," + Environment.NewLine + "wordt de korting textbox lichtgroen");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            errorProvider1.Clear();
            errorProvider2.Clear();
            if (float.TryParse(textBox1.Text, out Stukprijs))
            {
                if (float.TryParse(textBox2.Text, out Aantal))
                {
                    float Totaal = Stukprijs * Aantal;
                    string Output = Totaal.ToString();
                    textBox3.Text = Output;
                    if (Totaal >= 100)
                    {
                        float korting = Totaal - 100;
                        float korting2 = korting / 100 * 15;
                        string Output2 = korting2.ToString();
                        textBox4.Text = Output2;
                        if (korting2 >= 10)
                        {
                            textBox4.BackColor = Color.LightGreen;
                        }
                        else
                        {
                            textBox4.BackColor = SystemColors.Control;
                        }
                    }
                    else
                    {
                        textBox4.Text = "0";
                        textBox4.BackColor = SystemColors.Control;
                    }
                }
                else
                {
                    errorProvider2.SetError(textBox2, "Aantal plz!");
                }

            }
            else
            {
                errorProvider1.SetError(textBox1, "Bedrag plz!");
                if (float.TryParse(textBox2.Text, out Aantal))
                {

                }
                else
                {
                    errorProvider2.SetError(textBox2, "Aantal plz!");
                }
            }

        }

        private void BTNwissel_Click(object sender, EventArgs e)
        {
            //LL, LU, LR, LD.
            Color c = LL.BackColor;
            LL.BackColor = LU.BackColor;
            LU.BackColor = LR.BackColor;
            LR.BackColor = LD.BackColor;
            LD.BackColor = c;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            MessageBox.Show("zorg dat de kleuren linksom wisselen als je op de knop drukt.");
        }
    }
}
jan koekepan
fonte
Uma explicação estaria em ordem.
Peter Mortensen