C#에서는 데이터 타입을 쉽게 변환 할 수 있도록 하는 문법을 제공해 줍니다.


알아두면 편리합니다.


C#에서 String 타입에 문자열을 int형으로 변환하는 방법입니다.

int.Parse를 이용하여 아래와 같이 사용하면 됩니다.


1
2
3
String str = "12345";
int number = int.Parse(str); //변환
Console.WriteLine(number);  //출력




하지만 아래와 같이 String 타입의 문자열에 숫자가 아닌 문자가 들어있을 경우엔 에러가 발생하게 됩니다.


1
2
3
String str = "1a2";
int number = int.Parse(str);    //에러발생
Console.WriteLine(number);
cs


Unhandled Exception: System.FormatException: Input string was not in a correct format. 

이와같은 에러가 발생하게 됩니다.


이와 같은 에러발생을 방지하려면 TryParse() 함수를 이용하면 됩니다.

정상적으로 변환이 되면 true가 반환되고 실패하면 false가 반환이 됩니다.

함수의 원형은 아래와 같습니다.

bool int.TryParse(String s, out int number);




아래는 사용 예제입니다.


1
2
3
4
5
6
7
8
9
10
String str = "1a2";
int number;
if(int.TryParse(str, out number))
{
    Console.WriteLine(number);
}
else
{
    Console.WriteLine("fail");
}




int형 말고도 소수를 저장할 수 있는 double 형 역시 같은 방식으로 사용하면 됩니다.


1
2
3
4
5
6
7
8
9
10
String str = "123.4";
double number;
if(double.TryParse(str, out number))
{
    Console.WriteLine(number);
}
else
{
    Console.WriteLine("fail");
}
cs


날짜와 시간을 저장하는 자료형인 DateTime형 역시 아래와 같이 사용하면 됩니다.


1
2
3
4
5
6
7
8
9
10
String str = "17 april 2017";
DateTime dateTime;
if(DateTime.TryParse(str, out dateTime))
{
    Console.WriteLine(dateTime);
}
else
{
    Console.WriteLine("fail");
}

cs



Posted by 꿈만은공돌
,




C#/닷넷에 자료형에는 소수를 저장하는 변수가 double과 decimal 두가지가 존재


double은 부동소수점 방식을 이용하고 


decimal은 고정소수점 방식을 이용


부동소수점 방식 장점으론 작은 메모리공간에 큰 소수를 저장 가능하나 정확성이 떨어진다.


고정소수점 방식은 연산 속도가 빠르고 수의 정확성이 높은데신 큰수를 저장할때 메모리를 많이 잡아먹게 된다. 


C#에서 double은 8byte 메모리를 사용하며 decimal은 16byte에 메모리를 사용한다.


- 부동소수점의 원리를 잘 설명한 블로그 : https://blog.naver.com/chdb57/221146120811


- 고정소수점의 원리를 잘 설명한 블로그 : https://chogahui05.blog.me/221246891984




- 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//부동소수점 double 사용
double double1 = 0.1;
double double2 = 1;
 
if (double1 + double2 == 1.1)
    Console.WriteLine("값 일치");
else
    Console.WriteLine("일치하지 않음");
   
 
//고정소수점 decimal 사용         
decimal decimal1 = 0.1M;
decimal decimal2 = 1.1M;
 
if (decimal1 + decimal2 == 1.1M)
    Console.WriteLine("값 일치");
else
    Console.WriteLine("일치하지 않음");



위의 예제처럼 부동 소수점은 == 연산을 사용해서 비교를 하면 안된다.


Posted by 꿈만은공돌
,