0

データベースから返された値に基づいて VB でいくつかの計算を行っています。値を MS Excel で既に取得している結果と比較しましたが、少しずれているようです。また、すべてのデータがデータベースから正常に読み取られていることも知っています。私が使用しているデータ型と何か関係があるのでしょうか? double と decimal の両方を試しましたが、まだ運がありません。各配列には 24 個の値があります。私の式は次のとおりです。

Σ[(forecast-historic)/historic*100]/24

これは私のコードです。ちなみに、すべての変数は double です。

Public Function Evaluate(ByVal historic() As Double, ByVal forecast() As Double) As Double
    For z As Integer = 0 To 23
        hourly(z) = ((forecast(z) - historic(z)) / historic(z)) * 100
        daily+= Math.Abs(hourly(z))
    Next
    effectiveness= daily / 24
    Return effectiveness
End Function

たとえば、次の場合:

historic() = {16,18,15,16,14,14,15,16,17,20,22,25,27,27,27,27,26,24,23,22,19,18,16,16}
forecast() = {17,17,16,16,16,16,16,15,15,18,21,24,26,27,29,29,28,28,26,24,22,21,19,18}

MS Excel での結果は 8.47643 ですが、VB では 9.1245 です。

値を 1 つずつ確認しましたが、値を hourly に送信した最初の操作以降、値が異なります。

これをより正確にする方法について何か提案はありますか? ありがとう。

4

1 に答える 1

1

指定した値の例では、VB値9.1245が正しいようです。私はExcelで試してみて、9.12452077として結果を得ました。

Excelスプレッドシートの数式を確認してください。ここに画像の説明を入力してください

  • 行5では、列AからXに対して、式= ABS(((A2-A1)/ A1)* 100)を使用しました。
  • Z5では、= SUM(A5:X5)/24が使用されています
于 2012-11-30T20:13:32.627 に答える