2010-07-08 102 views
1

我很难解释这一个。以下函数被用作工作表公式。 “空”的值仅仅意味着单元格是空的,因此没有价值。给定值{empty,empty,0.8,0.2},下面的函数是,有时返回像5.55111512312578E-17这样的值。在调试器中,它看起来像一切都是正确的,直到ParamArray中的最后一个值(在本例中为0.2)被处理。有什么想法吗?Excel 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}。

在返回并调用它之前,将其舍入到一些合理的小数位数。