본문 바로가기
C#

[C#] 데이터 형식 변환

by emforl 2023. 6. 7.
728x90
반응형
  • 크기가 서로 다른 정수 형식 사이의 변환(int -> sbyte, sbyte -> int)

대상의 용량보다 큰 경우 오버플로우 발생

 

예제 프로그램

sbyte a = 127;
int b = (int)a;
int x = 128;
sbyte y = (sbyte)x;

Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(x);
Console.WriteLine(y);

결과


  • 크기가 서로 다른 부동 소수점 형식 사이의 변환(float -> double, double -> float)

2진수로 된 데이터를 10진수로 복원후 2진수로 변환하기 때문에 완벽하지 않음

 

예제 프로그램

float a = 69.6875f;
Console.WriteLine($"a : {a}\n");

double b = (double)a;
Console.WriteLine($"b : {b}");
Console.WriteLine($"69.6875 == b : {69.6875 == b}\n");

float c = (float)b;
Console.WriteLine($"c : {c}");
Console.WriteLine($"a == c : {a == c}");
Console.WriteLine($"b == c : {b == c}\n");

float d = 0.1f;//2진수로 변환하여 기록하는 도중 완벽하지 않다.
Console.WriteLine($"d : {d}");
Console.WriteLine($"0.1 == d : {0.1 == d}\n");

double e = (double)d;
Console.WriteLine($"e : {e}");
Console.WriteLine($"0.1 == e : {0.1 == e}");
Console.WriteLine($"d == e : {d == e}\n");

double f = (int)(d * 10) * 0.1;
Console.WriteLine($"f : {f}");
Console.WriteLine($"0.1 == f : {0.1 == f}");
Console.WriteLine($"d == f : {d == f}");
Console.WriteLine($"e == f : {e == f}\n");

float g = (float)e;
Console.WriteLine($"g : {g}");
Console.WriteLine($"0.1 == g : {0.1 == g}");
Console.WriteLine($"d == g : {d == g}");
Console.WriteLine($"e == g : {e == g}");
Console.WriteLine($"f == g : {f == g}\n");

결과

g: 데이터의 형식으로 인해 표면상에서 데이터의 뒷부분이 안 보이기 때문(개인적 생각입니다, 틀렸으면 댓글 부탁드립니다)


  • 부호 있는 정수 형식과 부호 없는 정수 형식 사이의 변환(int -> uint, uint -> int)

변환 도중 오버플로우와 언더플로우가 발생할 수 있음

 

예제 프로그램

int a = 500;
Console.WriteLine(a);

uint b = (uint)a;
Console.WriteLine(b);

int c = (int)b;
Console.WriteLine(c);

int x = -30;
Console.WriteLine(x);

uint y = (uint)x;
Console.WriteLine(y);

int z = (int)y;
Console.WriteLine(z);

결과


  • 부동 소수점 형식과 정수 형식 사이의 변환(float -> int, int -> float)

정수 형식으로 변환할 때 소수점을 버리고 소수점 위의 값만 남김

 

예제 프로그램

float a = 0.9f;
int b = (int)a;
float c = (float)b;
Console.WriteLine($"a : {a}");
Console.WriteLine($"b : {b}");
Console.WriteLine($"c : {c}\n");

float d = 1.1f;
int e = (int)c;
float f = (float)e;
Console.WriteLine($"d : {d}");
Console.WriteLine($"e : {e}");
Console.WriteLine($"f : {f}");

결과


  • 문자열 -> 숫자, 숫자 -> 문자열

- 문자열 -> 숫자: int/double/float.Parse(문자열), Convert.ToInt/ToDouble/ToByte(문자열)등 사용

- 숫자 -> 문자열: (변수명).ToString() 사용

 

예제 프로그램

int a = 123;
string b = a.ToString();
Console.WriteLine(b + "\n");

float c = 3.14f;
string d = c.ToString();
Console.WriteLine(d + "\n");

string e = "123456";
int f = Convert.ToInt32(e);
int g = int.Parse(e);
Console.WriteLine(f + ", " + g + $", {f}, " + "{0}\n", g);

string h = "1.2345";
float i = float.Parse(h);
double j = Convert.ToDouble(h);
Console.WriteLine(i);
Console.WriteLine(j + "\n");

char k = 'a';
string l = char.ToString(k);
char m = Convert.ToChar(l);
Console.WriteLine(l);
Console.WriteLine(m);

결과

 

ps. 어떤 형식의 코드를 사용할 것인지는 프로그래머의 마음입니다. 사용해 봤을 때 편한 방식을 사용하세요.

728x90
반응형

'C#' 카테고리의 다른 글

[C#] Nullable 형식  (0) 2023.06.08
[C#] 상수, 열거 형식  (0) 2023.06.08
[C#] object 형식  (0) 2023.06.07
[C#] 논리 형식  (0) 2023.05.26
[C#] 문자/문자열 형식  (6) 2023.05.26