1

これを説明するのに苦労しています。次の関数は、ワークシートの数式として使用されています。「空」という値は、セルが空であったため、値がないことを意味します。値 {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
4

1 に答える 1

4

このエラーは、浮動小数点の精度の問題が原因です。最初の 2 つの値が 0 と 0 であっても、同じ結果になります。{0.1, 0.2, 0.3, 0.4} も同様です。

それを返す前に、適切な小数点以下の桁数に丸めて、1 日と呼びます。

于 2010-07-08T22:14:43.627 に答える