Comment puis-je convertir String en Int?

638

J'ai un TextBoxD1.Textet je veux le convertir enint pour le stocker dans une base de données.

Comment puis-je faire ceci?

turki2009
la source

Réponses:

1039

Essaye ça:

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

ou mieux encore:

int x = 0;

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

De plus, puisque Int32.TryParserenvoie un, boolvous pouvez utiliser sa valeur de retour pour prendre des décisions sur les résultats de la tentative d'analyse:

int x = 0;

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

Si vous êtes curieux, la différence entre Parseet TryParsese résume mieux comme ceci:

La méthode TryParse est similaire à la méthode Parse, sauf que la méthode TryParse ne lève pas d'exception si la conversion échoue. Il élimine le besoin d'utiliser la gestion des exceptions pour tester une exception FormatException dans le cas où s n'est pas valide et ne peut pas être analysé avec succès. - MSDN

Andrew Hare
la source
3
Que faire si l'entier est 64 bits ou ressemble à "aslkdlksadjsd"? Est-ce toujours sûr?
Jonny
6
@Jonny Int64.Parse(). Si l'entrée n'est pas int, vous obtiendrez une exécution et une trace de pile avec Int64.Parse, ou le booléen Falseavec Int64.TryParse(), vous aurez donc besoin d'une instruction if, comme if (Int32.TryParse(TextBoxD1.Text, out x)) {}.
1
Vous pouvez également essayer d'initialiser la variable dans TryParse si elle ne doit être utilisée qu'à l'intérieur de la condition de réussite. par exemple: Int32.TryParse (TextBoxD1.Text, out int x))
simplysiby
5
Peut-être que cela est incroyablement évident pour tout le monde, mais pour les noobis, ce que fait 'out x' est de définir la valeur de x sur le string cast-as-integer, si le casting est réussi. C'est-à-dire dans ce cas, x = 0 si la chaîne a des caractères non entiers, ou x = valeur de chaîne comme entier sinon. Donc, ce qui est bien, c'est que c'est une expression courte qui vous indique si le transtypage a réussi ou non, ET stocke l'entier cast dans une variable en même temps. Évidemment, vous voudrez souvent continuer au-dessus de la ligne avec 'else {// la chaîne analysée n'est pas un entier, donc du code pour gérer cette situation}'
Will Croxford
@Roberto ok, mais il est possible que l'utilisateur (par erreur ou intentionnellement) tape une telle valeur "aslkdlksadjsd" dans une zone de texte! notre programme devrait-il donc planter?
S.Serpooshan
55
Convert.ToInt32( TextBoxD1.Text );

Utilisez-le si vous êtes certain que le contenu de la zone de texte est valide int. Une option plus sûre est

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

Cela vous fournira une valeur par défaut que vous pouvez utiliser. Int32.TryParserenvoie également une valeur booléenne indiquant s'il a pu analyser ou non, vous pouvez donc même l'utiliser comme condition d'une ifinstruction.

if( Int32.TryParse( TextBoxD1.Text, out val ){
  DoSomething(..);
} else {
  HandleBadInput(..);
}
Babak Naffas
la source
-1 RE. "Cela vous fournira une valeur par défaut que vous pouvez utiliser." Si vous voulez dire val, attendez-vous à un problème: "Ce paramètre est passé non initialisé; toute valeur initialement fournie dans le résultat sera écrasée." [Réf. docs.microsoft.com/en-us/dotnet/api/… ]
Zeek2
6
Il y a 10 ans, je m'excuse.
Babak Naffas
37
int.TryParse()

Il ne lancera pas si le texte n'est pas numérique.

n8wrl
la source
C'est mieux que les deux autres. L'entrée utilisateur est probablement au mauvais format. Celui-ci est plus efficace que l'utilisation de la gestion des exceptions comme les autres l'exigent.
UncleO
Exactement. Elle retourne false si la conversion a échoué.
n8wrl
21
int myInt = int.Parse(TextBoxD1.Text)

Une autre façon serait:

bool isConvertible = false;
int myInt = 0;

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

La différence entre les deux est que la première lèverait une exception si la valeur de votre zone de texte ne peut pas être convertie, tandis que la seconde retournerait simplement false.

Andre Kraemer
la source
La variable booléenne ci-dessus est très utile, nous utilisons la valeur convertie pour la comparaison, disons dans une clause if. code int NumericJL; bool isNum = int.TryParse (nomeeJobBand, out NumericJL); if (isNum) // Le JL retured est capable de coller à int puis aller de l'avant pour la comparaison {if (! (NumericJL> = 6)) {// Nominate} // else {}}
baymax
16

Vous devez analyser la chaîne et vous devez également vous assurer qu'elle est vraiment au format entier.

La façon la plus simple est la suivante:

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
la source
14

Soyez prudent lorsque vous utilisez Convert.ToInt32 () sur un caractère!
Il renverra l' UTF-16 code du personnage!

Si vous accédez à la chaîne uniquement dans une certaine position à l'aide de l' [i]opérateur d'indexation, elle renverra un charet non un 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
la source
11
int x = 0;
int.TryParse(TextBoxD1.Text, out x);

L'instruction TryParse renvoie un booléen indiquant si l'analyse a réussi ou non. S'il réussit, la valeur analysée est stockée dans le deuxième paramètre.

Voir Int32.TryParse, méthode (String, Int32) pour des informations plus détaillées.

jorelli
la source
11

Profitez-en...

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

Bien qu'il existe déjà de nombreuses solutions qui décrivent int.Parse , il y a quelque chose d'important qui manque dans toutes les réponses. En règle générale, les représentations sous forme de chaîne des valeurs numériques diffèrent selon la culture. Les éléments des chaînes numériques tels que les symboles monétaires, les séparateurs de groupe (ou de milliers) et les séparateurs décimaux varient tous selon la culture.

Si vous souhaitez créer un moyen robuste d'analyser une chaîne en un entier, il est donc important de prendre en compte les informations de culture. Si vous ne le faites pas, les paramètres de culture actuels seront utilisés. Cela pourrait donner à un utilisateur une très mauvaise surprise - ou pire encore, si vous analysez des formats de fichiers. Si vous souhaitez simplement analyser l'anglais, il est préférable de le rendre simplement explicite, en spécifiant les paramètres de culture à utiliser:

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

Pour plus d'informations, consultez CultureInfo, en particulier NumberFormatInfo sur MSDN.

atlaste
la source
8

Vous pouvez écrire votre propre méthode d'extension

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();
    }
}

Et n'importe où dans le code, il suffit d'appeler

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

Dans ce cas concret

int yourValue = TextBoxD1.Text.ParseInt();
Miroslav Holec
la source
La classe ne devrait-elle pas être appelée à la StringExtensionsplace de IntegerExtensions, puisque ces méthodes d'extension agissent sur un stringet non sur un int?
Shiva
7

Comme expliqué dans la documentation TryParse , TryParse () renvoie un booléen qui indique qu'un nombre valide a été trouvé:

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
la source
7
int x = Int32.TryParse(TextBoxD1.Text, out x) ? x : 0;
Mohammad Rahman
la source
Concis et fournit par défaut 👍
Zeek2
6

Vous pouvez utiliser soit,

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

ou

int i = int.Parse(TextBoxD1.Text);
Impasse
la source
En quoi est-ce différent des réponses précédentes?
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
la source
La défaillance dans ce cas ne serait pas une bonne idée. Si tout défaut est indispensable, je recommande de retourner 0.
Prageeth Saravanan
5

Vous pouvez convertir une chaîne en int en C # en utilisant:

Fonctions de la classe de conversion par exemple Convert.ToInt16(), Convert.ToInt32(), Convert.ToInt64()ou en utilisant Parseet TryParsefonctions. Des exemples sont donnés ici .

Atif
la source
En quoi est-ce différent des réponses précédentes?
Peter Mortensen
4

Vous pouvez également utiliser une méthode d'extension , elle sera donc plus lisible (bien que tout le monde soit déjà habitué aux fonctions Parse régulières).

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);
    }
}

Et puis vous pouvez l'appeler de cette façon:

  1. Si vous êtes sûr que votre chaîne est un entier, comme "50".

    int num = TextBoxD1.Text.ParseToInt32();
  2. Si vous n'êtes pas sûr et souhaitez éviter les plantages.

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

Pour le rendre plus dynamique, afin que vous puissiez également l'analyser pour doubler, flotter, etc., vous pouvez créer une extension générique.

Misha Zaslavsky
la source
4

La conversion de stringla intpeut être fait pour: int, Int32, Int64et d' autres types de données reflétant les types de données entières dans .NET

L'exemple ci-dessous montre cette conversion:

Cet élément d'adaptateur de données show (for info) est initialisé à la valeur int. La même chose peut être faite directement comme,

int xxiiqVal = Int32.Parse(strNabcd);

Ex.

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

Lien pour voir cette démo .

Edwin b
la source
4

Cela ferait

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

Ou vous pouvez utiliser

int xi = Int32.Parse(x);

Consultez Microsoft Developer Network pour plus d'informations

Paddler
la source
En quoi est-ce différent des réponses précédentes?
Peter Mortensen
4

Vous pouvez faire comme ci-dessous sans TryParse ou fonctions intégrées:

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
la source
convertToInt ("1234") donne 10000 ...... si vous allez copier la réponse de quelqu'un d'autre, au moins copiez le tout
SerenityNow
ne me compare pas avec toi-même .. ajoute une solution mise à jour à la place .. lol
lazydeveloper
@SerenityNow, vous pouvez vérifier maintenant. C'était une erreur de frappe.
lazydeveloper
1
se référant à votre identifiant, un développeur paresseux ne créera pas une telle méthode! ; D bon
S.Serpooshan
3
int i = Convert.ToInt32(TextBoxD1.Text);
deepu
la source
Une explication serait de mise. Par exemple, en quoi est-ce différent de la réponse de Babak Naffas ?
Peter Mortensen
2

Vous pouvez convertir une chaîne en une valeur entière à l'aide de la méthode d'analyse.

Par exemple:

int val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);
Codemaker
la source
En quoi est-ce différent des réponses précédentes?
Peter Mortensen
2

La façon dont je le fais toujours est la suivante:

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.
        }
    }
}

Voilà comment je le ferais.

Isaac Newton
la source
0

Si vous cherchez le long chemin, créez simplement votre méthode:

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
la source
0

MÉTHODE 1

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

MÉTHODE 2

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

MÉTHODE 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
la source
0

Ce code fonctionne pour moi dans Visual Studio 2010:

int someValue = Convert.ToInt32(TextBoxD1.Text);
Sarib Shamim
la source
Oui, mais en quoi est-ce différent des réponses précédentes?
Peter Mortensen
0

Cela fonctionne pour moi:

using System;

namespace numberConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            string numberAsString = "8";
            int numberAsInt = int.Parse(numberAsString);
        }
    }
}
Sheridan Irvine
la source
Une explication serait de mise.
Peter Mortensen
0

Vous pouvez essayer ce qui suit. Ça va marcher:

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

La valeur de chaîne dans la variable TextBoxD1.Text sera convertie en Int32 et stockée dans x.

Kartikey Kushwaha
la source
0

Dans C # v.7, vous pouvez utiliser un paramètre inline out, sans déclaration de variable supplémentaire:

int.TryParse(TextBoxD1.Text, out int x);
Max Miller
la source
Les outparamètres ne sont-ils pas découragés en C # maintenant?
Peter Mortensen
-3

Cela peut vous aider; 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
la source
Une explication serait de mise.
Peter Mortensen