Visual Basic, C & C++
분류 Visual Basic

[VB] Int()함수의 버그

페이지 정보

본문

  Int()함수의 버그                                                              TOP

 문제의 발생

 어떤 값에 0.3을 곱하고, 이 결과에서 소수점을 버린 다음 합계를 구하는 문제에서 발생한다.

 소스

  Option Explicit

  Sub Main()

       Dim a As Long, b As Long, c As Long
       Dim d As Double, e As Double, f As Double

       a = 10
       b = Int(a * 0.3)
       c = Int(a * 30 / 100)

       d = 10
       e = Int(d * 0.3)
       f = Int(d * 30 / 100)

       MsgBox Str(a) & Str(b) & Str(c) 
       MsgBox Str(d) & Str(e) & Str(f)

   End Sub

 (결과)   10 2 3

             10 2 3

 (해석) a * 0.3 은 0.3을 나타내는 수가 0.29999...라고 보면 
           몫은 2.99999...가 되어 소수 이하를 잘랐다고 보면되지만
          어쨌던 3 이 나오지 않으니 조심하기 바랍니다.
 

 (해결책) (1) 소수점 곱하기를 사용하지 않는다.
                     c = Int(a * 30 / 100)
              (2) Int() 함수 안에서 연산을 하지 않는다.
                     temp = a * 0.3
                     c = Int(temp)

[이 게시물은 최고관…님에 의해 2012-09-14 16:58:28 Etc.에서 이동 됨]

관련자료

등록된 댓글이 없습니다.
프로그래밍
Today's proverb
행복의 원칙은 첫째 어떤 일을 할 것. 둘째 어떤 사람을 사랑할 것. 셋째 어떤 일에 희망을 가질 것이다. (칸트)