String을 Int로 변환하려면 어떻게해야합니까?


638

나는 그것을 데이터베이스에 저장 TextBoxD1.Text하기 위해로 변환하고 싶습니다 int.

어떻게해야합니까?

답변:


1038

이 시도:

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

또는 더 나은 아직 :

int x = 0;

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

또한 반환 값 Int32.TryParsea bool를 사용하면 반환 값을 사용하여 구문 분석 시도 결과에 대한 결정을 내릴 수 있습니다.

int x = 0;

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

궁금한 점과의 차이점은 다음 ParseTryParse같습니다.

TryParse 메서드는 Parse 메서드와 비슷하지만 변환에 실패한 경우 TryParse 메서드는 예외를 throw하지 않습니다. s가 유효하지 않고 구문 분석 할 수없는 경우 예외 처리를 사용하여 FormatException을 테스트 할 필요가 없습니다. - MSDN


3
정수가 64 비트이거나 "aslkdlksadjsd"처럼 보이는 경우 어떻게해야합니까? 여전히 안전합니까?
Jonny

6
@ 조니 Int64.Parse(). 입력이 정수가 아닌 경우, execption 및을 사용하여 스택 추적을 얻거나을 사용 Int64.Parse하여 부울 False을 얻으 Int64.TryParse()므로 if와 같은 if 문이 필요합니다 if (Int32.TryParse(TextBoxD1.Text, out x)) {}.

1
성공 조건 내에서만 사용하려는 경우 TryParse에서 변수를 초기화 할 수도 있습니다. 예 : Int32.TryParse (TextBoxD1.Text, out int x))
간단하게

5
어쩌면 이것은 다른 모든 사람들에게 명백하게 알 수 있지만, 멍청한 사람들에게는 'x'가하는 일은 캐스팅이 성공하면 x의 값을 정수로 문자열로 설정하는 것입니다. 즉,이 경우 문자열에 정수가 아닌 문자가 있으면 x = 0이고, 그렇지 않으면 x = string-as-teteger 값입니다. 따라서 깔끔한 것은 캐스팅 성공 여부를 알려주는 짧은 표현이며, 캐스팅 정수를 변수에 동시에 저장합니다. 분명히 당신은 종종 'else {// string parsed is integer 정수가 아니므로이 상황을 처리하는 코드가 있습니다.'와 같은 줄을 계속
넘길 원할 것입니다.

@Roberto는 괜찮지 만 사용자가 실수로 또는 의도적으로 텍스트 상자 안에 "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 RE. "이것은 사용할 수있는 기본값을 제공합니다." val을 의미하는 경우 문제점이 발생합니다. "이 매개 변수는 초기화되지 않은 상태로 전달됩니다. 원래 결과로 제공된 값을 겹쳐 씁니다." [참조 docs.microsoft.com/ko-kr/dotnet/api/… ]
Zeek2

6
10 년 전 사과합니다.
Babak Naffas 2016 년

37
int.TryParse()

텍스트가 숫자가 아닌 경우 발생하지 않습니다.


이것은 다른 두 가지보다 낫습니다. 사용자 입력이 잘못된 형식 일 수 있습니다. 이것은 다른 것들처럼 예외 처리를 사용하는 것보다 효율적입니다.
UncleO 2016 년

바로 그거죠. 변환이 실패하면 false를 반환합니다.
n8wrl 2016 년

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

다른 방법은 다음과 같습니다.

bool isConvertible = false;
int myInt = 0;

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

둘의 차이점은 텍스트 상자의 값을 변환 할 수없는 경우 첫 번째 값은 예외를 throw하는 반면 두 번째 값은 false를 반환한다는 것입니다.


위의 부울 변수는 comaprison에 변환 된 값을 사용하는 데 매우 유용합니다. code int NumericJL; bool isNum = int.TryParse (nomeeJobBand, NumericJL); if (isNum) // retured JL을 int로 파싱 할 수 있다면 비교를 계속하십시오. {if (! (NumericJL> = 6)) {// Nominate} // else {}}
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아닌 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

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

TryParse 문은 구문 분석이 성공했는지 여부를 나타내는 부울을 반환합니다. 성공하면 구문 분석 된 값이 두 번째 매개 변수에 저장됩니다.

자세한 내용은 Int32.TryParse 메서드 (String, Int32) 를 참조하십시오.



10

여기에 이미 많은 솔루션이 있지만 int.Parse 모든 답변에서 중요한 부분이 빠져 있습니다. 일반적으로 숫자 값의 문자열 표현은 문화권에 따라 다릅니다. 통화 기호, 그룹 (또는 수천) 구분 기호 및 소수 구분 기호와 같은 숫자 문자열 요소는 모두 문화에 따라 다릅니다.

문자열을 정수로 구문 분석하는 강력한 방법을 만들려면 문화권 정보를 고려해야합니다. 그렇지 않으면 현재 문화권 설정 이 사용됩니다. 파일 형식을 구문 분석하는 경우 사용자에게 놀라움을 줄 수 있습니다. 영어 구문 분석을 원할 경우 사용할 문화권 설정을 지정하여 명시 적으로 명시하는 것이 가장 좋습니다.

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

자세한 내용은 CultureInfo, 특히 MSDN의 NumberFormatInfo 를 참조하십시오 .


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

이러한 확장 메소드 는 ?가 아닌 a에 작용하므로 클래스 StringExtensions대신에 클래스를 호출 IntegerExtensions하면 string안됩니다 int.
시바

7

TryParse documentation에 설명 된대로 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
}


6

둘 중 하나를 사용할 수 있습니다.

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

또는

int i = int.Parse(TextBoxD1.Text);

이것은 이전 답변과 어떻게 다릅니 까?
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;
}

이 경우 기본값을 설정하는 것은 좋지 않습니다. 모든 채무 불이행이 결정적으로 필요한 경우 0을 반환하는 것이 좋습니다.
Prageeth Saravanan

5

다음을 사용하여 C #에서 문자열을 int로 변환 할 수 있습니다.

즉, 변환 클래스의 기능 Convert.ToInt16(), Convert.ToInt32(), Convert.ToInt64()또는 사용하여 ParseTryParse기능. 여기에 예가 나와 있습니다 .


이것은 이전 답변과 어떻게 다릅니 까?
Peter Mortensen

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
ID를 언급하면 게으른 개발자는 그러한 방법을 만들지 않습니다! ; D good
S.Serpooshan


2

구문 분석 방법을 사용하여 문자열을 정수 값으로 변환 할 수 있습니다.

예 :

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

이것은 이전 답변과 어떻게 다릅니 까?
Peter Mortensen

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

방법 1

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

방법 2

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

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

0

이 코드는 Visual Studio 2010에서 작동합니다.

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

예, 그러나 이전 답변과 어떻게 다릅니 까?
Peter Mortensen

0

이것은 나를 위해 작동합니다 :

using System;

namespace numberConvert
{
    class Program
    {
        static void Main(string[] args)
        {
            string numberAsString = "8";
            int numberAsInt = int.Parse(numberAsString);
        }
    }
}

순서대로 설명하겠습니다.
Peter Mortensen

0

다음을 시도해보십시오. 작동합니다 :

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

변수 TextBoxD1.Text의 문자열 값은 Int32로 변환되고 x에 저장됩니다.


0

C # v.7에서는 추가 변수 선언없이 인라인 출력 매개 변수를 사용할 수 있습니다.

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

되지 않은 out현재 C #으로 낙담 매개 변수?
Peter Mortensen

-3

이것은 당신을 도울 수 있습니다; 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.");
        }
    }
}

순서대로 설명하겠습니다.
Peter Mortensen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.