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("일치하지 않음"); |
위의 예제처럼 부동 소수점은 == 연산을 사용해서 비교를 하면 안된다.
'닷넷,C#,.NET' 카테고리의 다른 글
C#/.NET Parse, TryParse로 String을 int,double,DateTime 타입으로 형변환 시키기 (0) | 2018.04.17 |
---|---|
C# 6.0, 7.0 새로운 기능들 소개 사이트 (0) | 2018.04.16 |
C#/.NET Nullable 타입과 null 체크 및 처리 (0) | 2018.04.15 |
닷넷 네이티브(.NET Native)란 무엇인가? (0) | 2018.04.13 |
.NET Framework, .NET Core, Xamarin 차이와 공통점 (2) | 2018.04.13 |