여기에서는 숫자 문자열을 정수 유형으로 변환하는 방법에 대해서 알아볼께요.
C#에서 다음 3가지 방법을 사용하여 숫자의 문자열 표현을 정수로 변환할 수 있습니다.
- Parse() 함수 사용 방법
- Convert class 이용 방법
- TryParse() 함수 사용 방법 (추천)
1. Parse() 함수를 사용하는 방법
Parse() 함수는 문자열을 정수로 변환하는 가장 쉬운 방법으로 모든 기본 데이터 유형에 사용할 수 있습니다.
Parse 함수는 16, 32, 64비트 부호 있는 정수 유형에 사용할 수 있습니다.
- Int16.Parse()
- Int32.Parse()
- Int64.Parse()
문자열을 정수 형식으로 변환하는 데 필수인 문자열,
두 번째 매개 변수에는 표시할 숫자 스타일을 지정하는 숫자 스타일,
세 번째 매개 변수는 문자열 문화별 형식을 나타내는 최대 3개의 매개 변수를 사용합니다.
다음 예제는 숫자 문자열을 정수로 변환하는 방법을 보여줍니다.
Int16.Parse("100"); // returns 100
Int16.Parse("(100)", NumberStyles.AllowParentheses); // returns -100
int.Parse("30,000", NumberStyles.AllowThousands, new CultureInfo("en-au"));// returns 30000
int.Parse("$ 10000", NumberStyles.AllowCurrencySymbol); //returns 10000
int.Parse("-100", NumberStyles.AllowLeadingSign); // returns -100
int.Parse(" 100 ", NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite); // returns 100
Int64.Parse("2147483649"); // returns 2147483649
위의 예에서 볼 수 있듯이 유효한 숫자 문자열을 정수로 변환할 수 있습니다.
이 Parse()방법을 사용하면 열거형을 사용하여 숫자 문자열을 다른 형식으로 변환할 수 있습니다
( NumberStyles예: 괄호가 있는 문자열, 문화권별 숫자 문자열, 통화 기호 포함).
그러나 전달된 문자열은 유효한 숫자 문자열이거나 호출되는 유형의 범위에 있어야 합니다.
다음 예는 잘못된 변환입니다.
int.Parse(null);//thows FormatException
int.Parse("");//thows FormatException
int.Parse("100.00"); // throws FormatException
int.Parse( "100a"); //throws formatexception
int.Parse(2147483649);//throws overflow exception use Int64.Parse()
장점:
- 유효한 숫자 문자열을 정수 값으로 변환합니다.
- 다양한 숫자 스타일을 지원합니다.
- 문화권별 사용자 지정 형식을 지원합니다.
단점:
- 입력 문자열은 유효한 숫자 문자열이어야 합니다.
- 숫자 문자열은 메서드가 호출되는 int 유형의 범위 내에 있어야 합니다.
- null 또는 유효하지 않은 숫자 문자열을 변환할 때 예외가 발생합니다.
2. Convert 클래스 이용 방법
문자열을 정수로 변환하는 두 번째 다른 방법은 정적 Convert 클래스를 사용하는 것입니다.
Convert 클래스에는 기본 데이터 유형을 다른 기본 데이터 유형으로 변환하는 다양한 메서드가 포함되어 있습니다.
Convert 클래스에는 다양한 데이터 유형을 int 유형으로 변환하는 다음 메서드가 포함되어 있습니다.
- Convert.ToInt16()
- Convert.ToInt32()
- Convert.ToInt64()
이 Convert.ToInt16()메서드는 16비트 정수(예: short)를 반환하고,
Convert.ToInt32()32비트 정수(예: int)를 반환하며,
Convert.ToInt64()64비트 정수(예: long)를 반환합니다.
예: Convert 클래스를 사용하여 문자열을 int로 변환하는 예제입니다.
Convert.ToInt16("200"); // returns short
Convert.ToInt16(null);//returns 0
Convert.ToInt32("212300");// returns int
Convert.ToInt32("1234",16); // returns 4660 - Hexadecimal of 1234
Convert.ToInt64("1124567131321321");//returns long
// the following throw exceptions
Convert.ToInt16("");//throws FormatException
Convert.ToInt32("40,000"); //throws FormatException
Convert.ToInt16("(200)");//throws FormatException
Convert.ToInt16("200a"); //throws FormatException
Convert.ToInt16("1234567890");//throws OverflowException
장점:
- 모든 데이터 유형을 정수로 변환합니다.
- null을 0으로 변환하므로 예외가 발생하지 않습니다.
단점:
- 입력 문자열은 유효한 숫자 문자열이어야 하며 다른 숫자 형식을 포함할 수 없습니다. 유효한 정수 문자열에서만 작동합니다.
- 입력 문자열은 Int16, Int32, Int64와 같이 호출된 메서드의 범위 내에 있어야 합니다 IntXX.
- 입력 문자열은 괄호, 쉼표 등을 포함할 수 없습니다.
- Convert.ToInt16()다른 정수 범위에 대해 다른 방법을 사용해야 합니다. 예를 들어 "32767"보다 큰 정수 문자열에는 the를 사용할 수 없습니다 .
3. TryParse() 함수를 사용하는 방법 - 추천
TryParse()문자열을 호출 데이터 유형으로 변환하기 위해 모든 기본 유형에 메소드를 사용할 수 있습니다 . 문자열을 정수로 변환하는 권장 방법입니다.
이 TryParse()메서드는 숫자의 문자열 표현을 해당하는 16, 32 및 64비트 부호 있는 정수로 변환합니다. 변환의 성공 여부를 나타내는 부울을 반환하므로 예외가 발생하지 않습니다.
메소드 TryParse()는 모든 정수 유형에 사용할 수 있습니다.
- Int16.TryParse()
- Int32.TryParse()
- Int64.TryParse()
이 TryParse()메서드는 동일한 기능을 가진 메서드와 동일한 3개의 매개 변수를 사용합니다 .
다음 예제에서는 TryParse()방법을 보여 줍니다.
string numberStr = "123450";
int number;
bool isParsable = Int32.TryParse(numberStr, out number);
if (isParsable)
Console.WriteLine(number);
else
Console.WriteLine(""int형으로 변환에 실패했습니다."");
다음 예제는 유효하지 않은 숫자 문자열을 변환하는 방법을 보여줍니다.
string numberStr = "123test";
int number;
bool isParsable = Int32.TryParse(numberStr, out number);
if (isParsable)
Console.WriteLine(number);
else
Console.WriteLine("int형으로 변환에 실패했습니다.");
위의 예에서 numberStr = "123456as"잘못된 숫자 문자열입니다. 그러나 Int32.TryParse()메서드는 예외를 throw하는 대신 false를 반환합니다.
따라서 이 TryParse()방법은 문자열이 유효한 숫자 문자열인지 여부를 모를 때 숫자 문자열을 정수 유형으로 변환하는 가장 안전한 방법입니다.
장점:
- 다른 숫자 문자열을 정수로 변환합니다.
- 다양한 숫자 스타일의 문자열 표현을 변환합니다.
- 문화권별 숫자 문자열을 정수로 변환합니다.
- 절대 예외를 throw하지 않습니다. 정수로 구문 분석할 수 없으면 false를 반환합니다.
단점:
- out 매개변수를 사용해야 합니다.
- 단일 메서드 호출 대신 더 많은 코드 라인을 작성해야 합니다.
'공학속으로 > C#' 카테고리의 다른 글
C# 문자열에 특정 문자열 포함 여부 확인하기 (0) | 2023.04.11 |
---|---|
C# StreamReader 클래스를 사용한 파일 읽기 / 쓰기 (0) | 2023.04.04 |
C# 클립보드를 사용한 내용 복사하기 (0) | 2023.04.03 |
C# CheckBox 컨트롤 사용법 (0) | 2023.04.03 |
c# 타이머(Timer) 구성 요소 (0) | 2023.04.03 |
댓글