본문 바로가기
프로그래밍/C# (WinForms)

C# ] decimal 과 double 의 차이

by eteo 2023. 2. 25.

 

 

C#에서 실수를 저장할 수 있는 변수로 double과 decimal이 자주 사용됨.

 

double은 부동소수점 방식을 이용하고, decimal은 고정소수점 방식을 이용함

 

- double은 64비트(8바이트)크기에, 약 15~16 자리의 유효숫자를 가진다. decimal에 비해 연산이 빠르기에 대부분의 경우 사용됨.

 

- decimal은 128비트(16바이트)크기에 28~29 자리의 유효숫자를 가진다. 정밀한 계산이 필요한 금융, 세금, 과학 등의 분야에서 사용됨.

 

double d = 1.1 + 2.2; // d = 3.3000000000000003
decimal m = 1.1M + 2.2M; // m = 3.3

 

 

 

 

double의 경우 비교연산을 사용하면 예상 결과 나오지 않는다. 이는 double 은 이진수로 저장되기 때문에, 0.1과 0.2를 더한 결과인 0.30000000000000004와 0.3이 서로 같지 않다고 판단되기 때문.

 

반면, decimal은 고정 소수점 방식으로 10진수로 저장되기 때문에 더 정확한 결과를 보장한다.

 

double value = 0.1 + 0.2;
if (value == 0.3)
{
    Console.WriteLine("value는 0.3과 같습니다.");
}
else
{
    Console.WriteLine("value는 0.3과 같지 않습니다."); // 출력
}

decimal value = 0.1m + 0.2m;
if (value == 0.3m)
{
    Console.WriteLine("value는 0.3과 같습니다."); // 출력
}
else
{
    Console.WriteLine("value는 0.3과 같지 않습니다.");
}