मैं स्ट्रिंग को इंट में कैसे बदल सकता हूं?


638

मेरे पास एक है TextBoxD1.Textऔर मैं इसे intडेटाबेस में संग्रहीत करने के लिए इसे कन्वर्ट करना चाहता हूं ।

मैं यह कैसे कर सकता हूँ?

जवाबों:


1038

इसे इस्तेमाल करे:

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

या बेहतर अभी तक:

int x = 0;

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

इसके अलावा, Int32.TryParseरिटर्न के बाद boolआप पार्सिंग प्रयास के परिणामों के बारे में निर्णय लेने के लिए इसके रिटर्न वैल्यू का उपयोग कर सकते हैं:

int x = 0;

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

आप उत्सुक हैं, के बीच का अंतर Parseऔर TryParseसबसे अच्छा इस तरह अभिव्यक्त किया जाता है:

TryParse मेथड Parse मेथड की तरह है, सिवाय TryParse मेथड में कोई अपवाद नहीं फेंकता यदि कनवर्ज़न फेल हो जाता है। यह उस घटना में एक FormatException के परीक्षण के लिए अपवाद हैंडलिंग का उपयोग करने की आवश्यकता को समाप्त करता है जो कि अमान्य है और सफलतापूर्वक पार्स नहीं किया जा सकता है। - MSDN


3
क्या होगा यदि पूर्णांक 64 बिट है, या "aslkdlksadjsd" जैसा दिखता है? क्या यह अभी भी सुरक्षित है?
जॉनी

6
@ जॉनी Int64.Parse()। यदि इनपुट गैर-अंतर है, तो आपको एक निष्पादन और स्टैक ट्रेस मिलेगा Int64.Parse, या बूलियन के Falseसाथ Int64.TryParse(), इसलिए आपको एक स्टेटमेंट की आवश्यकता होगी, जैसे if (Int32.TryParse(TextBoxD1.Text, out x)) {}

1
आप TryParse में वैरिएबल को इनिशियलाइज़ करने का भी प्रयास कर सकते हैं यदि इसका उपयोग केवल सक्सेस कंडीशन के अंदर ही किया जाए। उदाहरण: Int32.TryParse (TextBoxD1.Text, int x))
बस 4

5
हो सकता है कि यह अविश्वसनीय रूप से बाकी सभी के लिए स्पष्ट हो, लेकिन लोगों के लिए जो 'एक्स' आउट करता है, वह कास्टिंग के सफल होने पर स्ट्रिंग-कास्ट-एस-पूर्णांक के लिए x का मान निर्धारित करता है। इस स्थिति में, x = 0 यदि स्ट्रिंग में कोई गैर-पूर्णांक वर्ण हैं, या x = स्ट्रिंग-अस-पूर्णांक का मान अन्यथा। तो साफ बात यह है कि यह एक छोटी अभिव्यक्ति है जो आपको बताती है कि कास्टिंग सफल है या नहीं, और एक ही समय में कलाकारों के पूर्णांक को एक चर में संग्रहीत करता है। जाहिर है कि आप अक्सर '' {{स्ट्रिंग पार्स के साथ ऊपर लाइन जारी रखना चाहते हैं, यह पूर्णांक नहीं है, इसलिए इस स्थिति को संभालने के लिए कुछ कोड} '
विल क्रॉफर्ड

@ रॉबर्टो ठीक है, लेकिन यह संभव है कि उपयोगकर्ता (या तो गलती से या जानबूझकर) एक टेक्स्टबॉक्स के अंदर ऐसे "aslkdlksadjsd" मान टाइप करें! तो क्या हमारा प्रोग्राम क्रैश होना चाहिए?
S.Serpooshan

55
Convert.ToInt32( TextBoxD1.Text );

इसका उपयोग करें यदि आपको विश्वास है कि पाठ बॉक्स की सामग्री वैध है int। एक सुरक्षित विकल्प है

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

यह आपको कुछ डिफ़ॉल्ट मूल्य प्रदान करेगा जिनका आप उपयोग कर सकते हैं। Int32.TryParseएक बूलियन मान भी बताता है कि यह पार्स करने में सक्षम था या नहीं, इसलिए आप इसे एक ifबयान की स्थिति के रूप में भी उपयोग कर सकते हैं ।

if( Int32.TryParse( TextBoxD1.Text, out val ){
  DoSomething(..);
} else {
  HandleBadInput(..);
}

-1 रे। "यह आपको कुछ डिफ़ॉल्ट मूल्य प्रदान करेगा जो आप उपयोग कर सकते हैं।" यदि आपके पास वैल का अर्थ है, तो परेशानी की उम्मीद करें: "यह पैरामीटर एकतरफा पारित किया गया है, मूल रूप से परिणाम में आपूर्ति की गई किसी भी मूल्य को ओवरराइट किया जाएगा।" [संदर्भ। docs.microsoft.com/en-us/dotnet/api/… ]
Zeek2

6
10 साल पहले मैं माफी मांगता हूं।
बाबाक नफ़स

37
int.TryParse()

यदि पाठ संख्यात्मक नहीं है, तो यह नहीं फेंकेगा।


यह अन्य दो की तुलना में बेहतर है। उपयोगकर्ता इनपुट गलत प्रारूप होने की संभावना है। यह एक अपवाद से निपटने की तुलना में अधिक कुशल है जैसे अन्य की आवश्यकता होती है।
अंकल

बिल्कुल सही। यदि रूपांतरण विफल हो जाता है तो यह गलत हो जाता है।
n8wrl

21
int myInt = int.Parse(TextBoxD1.Text)

एक और तरीका होगा:

bool isConvertible = false;
int myInt = 0;

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

दोनों के बीच का अंतर यह है कि यदि आपके टेक्स्टबॉक्स में मान को परिवर्तित नहीं किया जा सकता है, तो पहला अपवाद एक अपवाद होगा, जबकि दूसरा केवल एक झूठा वापस आएगा।


उपरोक्त बूलियन वैरिएबल बहुत उपयोगी है जो हम कॉम्प्रैशन के लिए परिवर्तित मूल्य का उपयोग कर रहे हैं, आइए एक क्लॉज में कहें। code int न्यूमेरिकजेल; बूल .Num = int.TryParse (nomeeJobBand, NumericJL से बाहर); if (isNum) // रिटायर्ड JL को int के लिए pasred करने में सक्षम है तो तुलना के लिए आगे बढ़ें {if (((NumericJL> = 6)) {// नामांकित} // बाकी {}}
baymax

16

आपको स्ट्रिंग को पार्स करने की आवश्यकता है, और आपको यह भी सुनिश्चित करने की आवश्यकता है कि यह वास्तव में पूर्णांक के प्रारूप में है।

सबसे आसान तरीका यह है:

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
}

14

एक char पर Convert.ToInt32 () का उपयोग करते समय सावधान रहें!
यह चरित्र का UTF-16 कोड लौटाएगा !

यदि आप [i]अनुक्रमणिका ऑपरेटर का उपयोग करके केवल एक निश्चित स्थिति में स्ट्रिंग का उपयोग करते हैं , तो यह ए charऔर नहीं लौटेगा string!

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

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

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

11
int x = 0;
int.TryParse(TextBoxD1.Text, out x);

TryParse स्टेटमेंट एक बूलियन को दर्शाता है कि पार्स सफल हुआ है या नहीं। यदि यह सफल हुआ, तो पार्स किया गया मान दूसरे पैरामीटर में संग्रहीत किया जाता है।

देखें Int32.TryParse विधि (स्ट्रिंग, Int32) में अधिक विस्तृत जानकारी के लिए।



10

हालांकि यहाँ पहले से ही कई समाधान हैं जो वर्णन करते हैं int.Parse, सभी उत्तरों में कुछ महत्वपूर्ण कमी है। आमतौर पर, सांख्यिक मूल्यों के स्ट्रिंग निरूपण संस्कृति से भिन्न होते हैं। मुद्रा प्रतीकों, समूह (या हजारों) विभाजकों और दशमलव विभाजकों जैसे संख्यात्मक स्ट्रिंग के तत्व संस्कृति से भिन्न होते हैं।

यदि आप एक स्ट्रिंग को पूर्णांक में पार्स करने का एक मजबूत तरीका बनाना चाहते हैं, तो इसलिए संस्कृति की जानकारी को ध्यान में रखना महत्वपूर्ण है। यदि आप नहीं करते हैं, तो वर्तमान संस्कृति सेटिंग्स का उपयोग किया जाएगा। यदि आप फ़ाइल स्वरूपों को पार्स कर रहे हैं, तो उपयोगकर्ता को बहुत बुरा आश्चर्य हो सकता है - या इससे भी बदतर। यदि आप केवल अंग्रेजी पार्स करना चाहते हैं, तो इसका उपयोग करने के लिए संस्कृति सेटिंग्स को निर्दिष्ट करके, बस इसे स्पष्ट करना सबसे अच्छा है:

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

अधिक जानकारी के लिए, कल्चरइन्फो, विशेष रूप से MSFormatInfo पर MSDN पर पढ़ें ।


8

आप अपनी खुद की एक्सटेंशन विधि लिख सकते हैं

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

और जहां भी कोड में कॉल करें

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

इस ठोस मामले में

int yourValue = TextBoxD1.Text.ParseInt();

के StringExtensionsबजाय वर्ग को बुलाया नहीं जाना चाहिए IntegerExtensions, क्योंकि ये विस्तार विधियां ए stringऔर ए पर नहीं है int?
शिव

7

जैसा कि TryParse प्रलेखन में बताया गया है , TryParse () एक बूलियन देता है जो इंगित करता है कि एक वैध संख्या पाई गई थी:

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
}



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

इस मामले में चूक करना एक अच्छा विचार नहीं होगा। यदि सभी डिफ़ॉल्ट रूप से महत्वपूर्ण रूप से आवश्यक है, तो मैं 0.
Prageeth Saravanan

5

आप C का उपयोग करके स्ट्रिंग को int में बदल सकते हैं:

परिवर्तित वर्ग के कार्य यानी Convert.ToInt16(), Convert.ToInt32(), Convert.ToInt64()या का उपयोग करके Parseऔर TryParseकार्य। उदाहरण यहाँ दिए गए हैं


यह पिछले उत्तरों से कैसे भिन्न है?
पीटर मोर्टेंसन

4

आप एक एक्सटेंशन विधि का उपयोग भी कर सकते हैं , इसलिए यह अधिक पठनीय होगा (हालांकि हर कोई पहले से ही नियमित पार्स कार्यों के लिए उपयोग किया जाता है)।

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

और फिर आप इसे इस तरह से कॉल कर सकते हैं:

  1. यदि आप सुनिश्चित हैं कि आपका स्ट्रिंग एक पूर्णांक है, जैसे "50"।

    int num = TextBoxD1.Text.ParseToInt32();
  2. यदि आप निश्चित नहीं हैं और दुर्घटनाओं को रोकना चाहते हैं।

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

इसे और अधिक गतिशील बनाने के लिए, ताकि आप इसे डबल, फ्लोट आदि के लिए भी पार्स कर सकें, आप एक सामान्य विस्तार कर सकते हैं।


4

के रूपांतरण stringके लिए intके लिए किया जा सकता है: int, Int32, Int64और अन्य डेटा प्रकार पूर्णांक डेटा प्रकार को दर्शाती .NET में

नीचे दिया गया उदाहरण इस रूपांतरण को दर्शाता है:

यह शो (जानकारी के लिए) डेटा एडेप्टर तत्व को int मान के लिए इनिशियलाइज़ किया गया है। इसे सीधे ही किया जा सकता है, जैसे

int xxiiqVal = Int32.Parse(strNabcd);

पूर्व।

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

इस डेमो को देखने के लिए लिंक



4

आप TryParse या इनबिल्ट फ़ंक्शंस के बिना नीचे पसंद कर सकते हैं:

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

ConvertToInt ("1234") 10000 देता है ...... यदि आप किसी और के उत्तर को कॉपी करने जा रहे हैं, तो कम से कम पूरी चीज़ की नकल करें
SerenityNow

मेरे साथ अपनी तुलना न करें .. इसके बजाय अद्यतन समाधान जोड़ें .. lol
lazydeveloper

@ SerenityNow अब आप देख सकते हैं। यह टाइपो की गलती थी।
lazydeveloper

1
अपनी आईडी का जिक्र करते हुए, एक आलसी -विकासकर्ता ऐसी विधि नहीं बनाएगा! ; डी अच्छा
S.Serpooshan


2

आप पार्स विधि की मदद से स्ट्रिंग को पूर्णांक मान में बदल सकते हैं।

उदाहरण के लिए:

int val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);

यह पिछले उत्तरों से कैसे भिन्न है?
पीटर मोर्टेंसन

2

जिस तरह से मैं हमेशा ऐसा करता हूं वह इस प्रकार है:

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

यह है कि मैं यह कैसे करेंगे।


0

यदि आप लंबे रास्ते की तलाश में हैं, तो बस अपनी एक विधि बनाएं:

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

0

विधि १

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

विधि २

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

विधि ३

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



0

आप निम्नलिखित की कोशिश कर सकते हैं। यह काम करेगा:

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

चर TextBoxD1.Text में स्ट्रिंग मान Int32 में परिवर्तित हो जाएगा और x में संग्रहीत किया जाएगा।


0

C # v.7 में आप एक अतिरिक्त चर घोषणा के बिना एक इनलाइन आउट पैरामीटर का उपयोग कर सकते हैं:

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

क्या outपैरामीटर C # में अब हतोत्साहित नहीं हैं?
पीटर मोर्टेंसन

-3

इससे आपको मदद मिल सकती है;

{
    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.");
        }
    }
}

एक स्पष्टीकरण क्रम में होगा।
पीटर मोर्टेंसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.