C#/문자열

[C#]문자열을 정수로 변환 방법(String to Int)

DevStory 2021. 9. 25.

C#에서 문자열을 정수로 변환하는 방법을 소개합니다.

 

다음 3가지 방법을 사용하여 숫자 형식의 문자열을 정수로 변환할 수 있습니다.

 


Parse() 메서드

Parse() 메서드는 문자열을 정수로 변환하는 가장 쉬운 방법이며 16, 32, 64비트 부호 있는 정수 타입에 사용할 수 있습니다.

  • Int16.Parse()
  • Int32.Parse()
  • Int64.Parse()

 

다음은 Parse() 메서드 기본 사용 방법입니다.

Int32.Parse("1000"); // 1000
Int32.Parse("-1000"); // -1000

 

Parse() 메서드는 공백이 있을 경우 공백을 알아서 제거합니다.

Int32.Parse("   2000 "); // 2000
Int32.Parse(" -1000 "); // -1000

 

그리고 Parse() 메서드는 오버로딩된 형태가 존재합니다.

  • Parse(String, NumberStyles, IFormatProvider)
  • Parse(String, NumberStyles)
  • Parse(String, IFormatProvider)

 

NumberStyles

숫자의 스타일을 지정합니다.

 

IFormatProvider

숫자를 지정된 문화권별 형식으로 표현합니다.

 

숫자의 스타일(NumberStyles) 또는 문화권별 형식(IFormatProvider)을 설정해야 하는 경우 아래 코드를 using문에 추가합니다.

using System.Globalization;

 

다음은 숫자의 스타일과 문화권별 형식을 지정한 코드입니다.

Int32.Parse("(10)", NumberStyles.AllowParentheses); // -10
Int32.Parse("3,000,000", NumberStyles.AllowThousands, new CultureInfo("en-au")); // 3000000
Int32.Parse("-1234", NumberStyles.AllowLeadingSign); // -1234
Int32.Parse(" 100 ", NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite); // 100

 

Parse() 메서드의 단점은 다음과 같습니다.

  • 유효한 숫자 문자열이어야 합니다.
  • 숫자 문자열은 int형 범위 내에 있어야 합니다.
  • null 또는 잘못된 숫자 문자열인 경우 예외가 발생합니다.

 

Parse() 메서드는 숫자 스타일과 문화권별 형식을 제공하지만, 어디서 예외가 발생할지 모르므로 예외 처리를 해야 한다는 단점이 존재합니다.


Convert 클래스

문자열을 정수로 변환하는 또 다른 방법으로 Convert 클래스가 존재합니다.

 

Convert 클래스에는 문자열을 정수로 변환하는 메서드가 존재합니다.

  • Convert.ToInt16()
  • Convert.ToInt32()
  • Convert.ToInt64()

 

그리고 ToInt16(), ToInt32(), ToInt64() 메서드는 다음과 같이 오버로딩된 형태가 존재합니다.

  • Convert.ToInt16(String, IFormatProvider)
  • Convert.ToInt16(String, Int32)

ToInt32(), ToInt64() 메서드도 동일한 형태의 오버로딩이 존재합니다.

 

IFormatProvider

숫자를 지정된 문화권별 형식으로 표현합니다.

 

Int32

숫자를 2, 8, 10, 16 진법으로 표현합니다.

 

다음은 Convert 클래스를 사용하여 문자열을 Int형으로 변환하는 코드입니다.

Convert.ToInt32("1000"); // 1000
Convert.ToInt32(null); // 0
Convert.ToInt32("1234", 16); // 4660

 

Convert 클래스의 정수 변환 메서드들의 단점은 다음과 같습니다.

  • 숫자 문자열은 int16, 32, 64형 범위 내에 있어야 합니다.
  • 숫자 스타일을 지원하지 않으므로 괄호와 쉼표 문자열 포함할 수 없습니다.

 

Convert 클래스의 정수 변환 메서드는 null을 0으로 변환하며, string뿐만 아니라 다른 데이터 타입들도 정수로 변환해주는 장점이 존재하지만, Parse() 메서드와 마찬가지로 예외가 발생한다는 단점이 있습니다.


TryParse() 메서드

TryParse() 메서드는 Parse() 메서드와 Convert 클래스의 정수 변환 메서드와 동일하게 16, 32, 64비트를 지원합니다.

  • Int16.TryParse()
  • Int32.TryParse()
  • Int64.TryParse()

 

다음은 TryParse() 메서드의 오버로딩된 형태입니다.

  • TryParse(String, Int32)
  • TryParse(String, NumberStyles, IFormatProvider, Int32)

 

Int32

문자열이 정수로 변환된 결과입니다.

 

NumberStyles

숫자의 스타일을 지정합니다.

 

IFormatProvider

숫자를 지정된 문화권별 형식으로 표현합니다.

 

다음은 TryParse() 메서드 기본 사용 방법이며, 숫자의 스타일과 문화권별 형식 사용 방법은 Parse() 메서드에서 보여줬으므로 생략합니다.

string strNumber = "1000";
int number;

bool isParsable = Int32.TryParse(strNumber, out number);

if (isParsable)
    Console.WriteLine(number);
else
    Console.WriteLine("변환 실패");

 

TryParse() 메서드의 단점은 다음과 같습니다.

  • out 키워드 사용 방법을 알고 있어야 합니다.
  • Parse() 메서드 Convert 클래스보다 코드가 많습니다.

 

TryParse() 메서드는 코드가 길다는 단점이 있지만, 예외가 발생하지 않고 숫자의 스타일, 문화권별 형식을 제공하기 때문에 Parse() 메서드와 Convert 클래스에 비해 안전하다는 장점이 있습니다.

반응형

댓글