开发者

Excel VBA Double Addition Error

开发者 https://www.devze.com 2023-01-06 17:00 出处:网络
I\'m having a hard time explaining this one.The following function is being used as a worksheet formula.A val开发者_运维问答ue of \"empty\" simply means that the cell was empty and, therefore, there i

I'm having a hard time explaining this one. The following function is being used as a worksheet formula. A val开发者_运维问答ue of "empty" simply means that the cell was empty and, therefore, there is no value. Given the values {empty, empty, 0.8, 0.2}, the following function is sometimes returning off the wall values like 5.55111512312578E-17. In the debugger, it looks like everything is correct until the last value in the ParamArray (in this case 0.2) is processed. Any thoughts?

   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


That error is the result of floating point accuracy problems. Even if your first two values are 0 and 0, it will still have the same result. So will {0.1, 0.2, 0.3, 0.4}.

Round it to some reasonable number of decimal places before returning it and call it a day.

0

精彩评论

暂无评论...
验证码 换一张
取 消