0

我正在根据从数据库返回的值对 VB 进行一些计算,我已经将这些值与我已经在 MS Excel 上得到的结果进行了比较,它们似乎有点偏离。我也知道所有数据都从数据库中成功读取。我想知道它是否与我正在使用的数据类型有关?我已经尝试过双精度和十进制,但仍然没有运气。每个数组中有 24 个值。我的公式是:

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

这是我的代码,顺便说一下,所有变量都是双精度数:

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。

我已经逐个检查了值,并且自从我将值发送到每小时的第一次操作以来,它们有所不同。

关于如何使这一点更准确的任何建议?谢谢。

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 回答