C#언어 문자열 숫자 변환 방법

2020. 9. 29. 16:06 컴퓨터/프로그래밍

C#언어 안전하게 문자열을 숫자로 변환하는 방법

새로운 언어를 학습하게 되면 형 변환이 제일 먼저 궁금해지지 않나 생각합니다. C에서는 atoi() 함수나 sscanf() 함수를 이용해서 숫자 문자열을 숫자 변수로 받는데요, C#에서는 어떻게 할까요? 객체지향 언어답게 메서드 방식으로 변환하는데요, 방법은 이렇습니다.

int nValue = int.Parse( str);

위 코드는 문자열 str의 값을 정수로 변환해서 nValue에 대입합니다. 방법은 쉽습니다만, 안심할 수 없습니다. 왜냐하면 str이 가지고 있는 문자열이 비었거나 숫자 문자열이 아니면 실행 에러가 발생합니다. 실행 에러라는 말씀은 빌드가 되어도 실행 중에 에러가 발생해서 종료가 된다는 것이죠.

이 문제를 해결하려면 C#의 예외 상황 처리 코드를 작성하면 됩니다.

int nValue;
try 
{ 
    nValue = int.Parse( str);
}
catch
{
    nValue = -1; 
}

문자열을 숫자로 바꾸는 곳마다 try...catch...구문을 사용해야 하지만, 안전한 코드를 위해 어쩔 수 없습니다. 델파이처럼 StrToIntDef() 함수가 있으면 참 좋은데 말이죠.

StrToIntDef()처럼 숫자 바꾸기가 안 되면 대신 반환하는 기본값을 정할 수 없지만, try...catch... 예외 상황 구문을 사용하지 않고 문자열을 숫자로 변경할 수 있습니다. Parse() 메서드 대산에 TryParse()를 사용하면 됩니다.

bool TryParse ( str, out int result);

TryParse는 문자열을 숫자로 바꾸면서 성공 여부를 반환하고, 숫자로 변환이 성공하면 두 번째 인자에 대입해 줍니다. 변수 타입 별로 TryParse() 메서드가 제공되어서 정수, 실수로 나누어 변환할 수 있습니다.

bool bOK = int.TryParse( "123", out int nValue);    // bOK == TRUE, nValue == 123
bool bOK = int.TryParse( "123.4", out int nValue);  // bOK == FALSE, nValue == 0
bool bOK = int.TryParse( "abc", out int nValue);    // bOK == FALSE, nValue == 0
bool bOK = int.TryParse( "", out int nValue);       // bOK == FALSE, nValue == 0

실수형 변수 타입을 사용한 예입니다.

bool bOK = float.TryParse( "123", out float nValue);   // bOK == TRUE, nValue == 123.0
bool bOK = float.TryParse( "123.4", out float nValue); // bOK == TRUE, nValue == 123.4
bool bOK = float.TryParse( "abc", out float nValue);   // bOK == FALSE, nValue == 0.0
bool bOK = float.TryParse( "", out float nValue);      // bOK == FALSE, nValue == 0.0

문자열을 숫자로 변환이 실패했을 때 숫자 값이 0 이라는 점도 이용할 수 있습니다.

이 댓글을 비밀 댓글로

티스토리 로그인이 풀리면 여기를 클릭하세요.

  1. c# 자료 잘보고 꾸욱 누르고 갑니다~~ 행복한 명절 연휴 되세요~~
  2. ..😳😳😳😳이게 뭘까여.. 봐도 어렵습니다 ㅜ
error: Content is protected !!