2010-07-08 4 views
1

나는 이것을 설명하는데 어려움을 겪고있다. 다음 함수는 워크 시트 수식으로 사용됩니다. "empty"값은 단순히 셀이 비어 있다는 것을 의미하므로 값이 없습니다. 값이 {empty, empty, 0.8, 0.2}이면 다음 함수는 이고 때로는이 5.55111512312578E-17과 같은 벽 값을 반환합니다. 디버거에서는 ParamArray의 마지막 값 (이 경우 0.2)이 처리 될 때까지 모든 것이 올바른 것처럼 보입니다. 이견있는 사람?엑셀 VBA 더블 덧셈 에러

Private Function getOvertimeEP(ParamArray epAllocations() As Variant) 
     Dim overtimeEP As Double 
     overtimeEP = -1 

     For Each nextVal In epAllocations 
      overtimeEP = overtimeEP + nextVal 
     Next 

     If overtimeEP < 0 Then 
      overtimeEP = 0 
     End If 

     getOvertimeEP = overtimeEP 
    End Function 

답변

4

해당 오류는 floating point accuracy problems의 결과입니다. 처음 두 값이 0과 0 인 경우에도 여전히 동일한 결과를 갖습니다. 따라서 {0.1, 0.2, 0.3, 0.4}가됩니다.

반환하기 전에 적절한 소수 자릿수로 반올림하고 하루로 지정하십시오.