KeiStory

C# Double/float 연산 결과가 이상할 때 처리 방법 (부동소수점 연산)

 

아래 값의 결과를 확인해 보면

double value1 = 0.01;
double value2 = 0.05;
double resultValue = value1 + value2;

0.060000000000000005 결과가 나오게됩니다.

double 로 표현하게되면 부동소수점은 근사치를 나타내는거라 정확하지 않습니다.

참고 : https://www.sysnet.pe.kr/Default.aspx?mode=2&sub=0&detail=1&pageno=0&wid=10872&rssMode=1&wtype=0

 

.NET Framework: 539. C# - 부동 소수 계산 왜 이렇게 나오죠? (1)

.NET Framework: 539. C# - 부동 소수 계산 왜 이렇게 나오죠? (1) [링크 복사], [링크+제목 복사], 조회: 25561 글쓴 사람 정성태 (techsharer at outlook.com) 홈페이지 첨부 파일 부모글 보이기/감추기 (연관된 글

www.sysnet.pe.kr

 

이를 해결하기 위한 방법은 아래와 같습니다.

1. decimal 을 사용하는 방법

double 을 사용하지 않고 decimal 을 사용합니다.

decimal value1 = 0.01m;
decimal value2 = 0.05m;
decimal resultValue = value1 + value2;

아래는 double 타입을 쓰면서 사용하는 방법입니다.

double value1 = 0.01;
double value2 = 0.05;
decimal calValue1 = (decimal)value1;
decimal calValue2 = (decimal)value2;

double resultValue = (double)(calValue1 + calValue2);

 

2. 문자로 바꿔서 처리하는 방법

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/c-sharp-float-expression-strange-behavior-when-casting-the-result-float-to-int

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band