본문 바로가기
C# 윈도우 프로그래밍

C#) double 형 데이터를 사용하는 루프

by ♥︎♦︎★ 2022. 6. 10.

int 형 증감을 사용하는 일반적인 for loop

c언어든, JAVA든 C# 이든.. 기타등등에서는 일반적으로 쓰는 for 루프에서는 

아래처럼 int 형 데이터를 증감시키면서 반복적인 연산을 수행하는 것이 일반적이다. 

 

for (int i = 0; i < 10; i++)
{
        // 블라블라~
}

 

double 형 증감이 필요한 상황? 

최근 어떤 프로그램을 하면서 콤보박스에 데이터를 0.1 부터 2.0 까지 넣어야 하는 상황이 있어서 

일반적인 방법으로 

for (double d = 0; d < 2.0; d+= 0.1)
{
        // 블라블라~
}

 

하지만 이 방법은 상황은 부동소수점 문제가 발생하여 

중간중간 데이터가 1.29999999999999, 1,38999999999999
뭐 이런식으로 적절한 반올림이 되지 않는 문제가 발생하였다. 

 

문제 해결을 위한 방법? (C# 에서만 사용해봄. )

적당한 구글링을 통해서 스택오버플로에서 작성한 코드를 보니 Math 함수를 이용하여 적절한 반올림으로

이 문제를 해결한 것을 보았다. 

정확히, 아래 예제 코드는, 

0.1 부터 2.0 까지의 데이터를 comboBox_test 라는 변수명을 가진 콤보박스에 추가하는 코드이다. 

 

 

 for (double d = 0.1; d < 2.1; d += 0.1)
{
           string temp = string.Format("{0:0.0}", (Math.Round(d * 10) / 10));
           comboBox_test.Items.Add(temp);
}

 

 

이론적으로 적절한 반올림이 되지 않는 이유를 찾아보고 싶진 않아서

그냥 돌아가는 것만 보고 이렇게 쓰기로 결정했다.. ^^;

댓글