Excel VBA Ошибка двойного добавления - PullRequest
1 голос
/ 08 июля 2010

Мне трудно объяснить это.Следующая функция используется в качестве формулы рабочего листа.Значение «пустой» просто означает, что ячейка была пустой и, следовательно, значения нет.Учитывая значения {empty, empty, 0.8, 0.2}, следующая функция иногда возвращает значения стены, такие как 5.55111512312578E-17В отладчике все выглядит правильно, пока не будет обработано последнее значение в ParamArray (в данном случае 0.2).Есть мысли?

   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

1 Ответ

4 голосов
/ 09 июля 2010

Эта ошибка является результатом проблем точности с плавающей запятой . Даже если ваши первые два значения 0 и 0, он все равно будет иметь тот же результат. Так же будет {0,1, 0,2, 0,3, 0,4}.

Округлите его до некоторого разумного числа десятичных знаков перед возвратом и назовите это за день.

...