닷넷,C#,.NET
C#/.NET double(부동소수점)와 decimal(고정소수점) 차이
꿈만은공돌
2018. 4. 15. 19:10
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("일치하지 않음"); |
위의 예제처럼 부동 소수점은 == 연산을 사용해서 비교를 하면 안된다.