我有一个结构数组
Private Type udtSingle
Dim Count As Long
Dim Value As Single
end Type
Private m(2) As udtSingle
假设数组填充如下:
m(0).Count = 5
m(0).Value = 100
m(1).Value = 1
m(1).Count = 10
你可以看到我们有5 * 100和1 * 10。
计算平均值的最佳方法是什么?
for i as integer = 0 to m.upperbound()
cAll += m(i).Count * m(i).Value
iCount+=m(i).Count
next i
dim average as currency
average = cAll / iCount
那会有效,但我真的很多.Count和高.Value,我害怕溢出。
我还能做什么呢?
如果阵列变得非常庞大,我无论如何都会得到溢出。我可以不在for-next-statement中重新计算平均值吗?我想是这样,但我能想到一个优雅的解决方案。
ps:是的,我知道,代码是一种伪代码......
答案 0 :(得分:0)
将cAll
声明为Double
以避免溢出。
Dim cAll as Double
然后
cAll += Convert.ToDouble(m(i).Count) * Convert.ToDouble(m(i).Value)
双倍范围大约为±1.7×10 ^ 308。