친구가
double value2 = 0.05;
double resultValue = value1 + value2;
위 결과가 이상하게 나온다고하여 확인해 보니
0.060000000000000005 으로 결과가 나왔다.;;
그래서 좀 찾아보니 어쩔수 없는.. 부동소수점은 근사치를 나타내는거라 정확하지 않다고 한다.
참고 http://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&pageno=0&wid=10872&rssMode=1&wtype=0
위 결과를 제대로 나타내기 위해선 아래와 같이 두가지 방법이 있다.
1. decimal 자료형을 쓰는것이다. (C# 에서는 이방법을 추천)
decimal value2 = 0.05m;
decimal resultValue = value1 + value2;
원래 코드에 영향없이 하려면 아래 방법이 좋을것 같다.
double value2 = 0.05;
decimal calValue1 = (decimal)value1;
decimal calValue2 = (decimal)value2;
double resultValue = (double)(calValue1 + calValue2);
2. double 형을 ToString() 해서 다시 double 로 변환을 해서 써도 된다.
double value1 = 0.01;
double value2 = 0.05;
double resultValue = Convert.ToDouble((value1 + value2).ToString());
추가로 다른 해결방법이 있을지는 모르겠다;
double/float 형으로 계산을 하는 경우는 주의를 해야할것 같다 자칫 잘못된 결과가 나올수 있기 때문이다.
C# 뿐만 아니라 모든 언어(IEEE 754따르는언어)에 해당된다고 한다.
참고
https://stackoverflow.com/questions/8911440/strange-behavior-when-casting-a-float-to-int-in-c-sharp
'C# > Winform' 카테고리의 다른 글
C# 7.0 기억해야 할 변경점- 1 (0) | 2017.12.29 |
---|---|
(C#) 특수문자 제거 정규식 (0) | 2017.12.27 |
Azure 무료계정 신청하기 (0) | 2017.11.27 |
카카오 쳇봇 만들기 - 3 (C# 서버 만들기) (0) | 2017.11.27 |
카카오 쳇봇 만들기 - 2 (C# 서버 만들기) (0) | 2017.11.27 |