2013-10-16 54 views
0

/平均我有一個結構的數組VB:Calcute意味着UDT陣列

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和high.Value,我怕溢出。

我還能做什麼?

如果數組變得非常大,反正我會得到溢出。我不能在for-next-statement中重新計算平均值嗎?我想是的,但我可以想到一個優雅的解決方案。

PS:是的,我知道,代碼是一種僞代碼...

+0

VB.Net不再支持'Type'聲明。現在是「結構」。你使用的是vb.net嗎? – igrimpe

+0

我正在使用VB6。但我認爲答案可以在.NET中,我可以將它翻譯成VB6,除非有人建議使用.NET更強大的功能來保存大量數據。 – tmighty

+0

反正我建議使用LINQ--當然你不能將它翻譯回vb6。另外vb.net does not有問題無論如何,因爲它分配乘法的結果,可以容納相當一些大數字'單') – igrimpe

回答

0

聲明cAllDouble避免溢出。

Dim cAll as Double 

然後

cAll += Convert.ToDouble(m(i).Count) * Convert.ToDouble(m(i).Value) 

雙人範圍可達約±1.7×10^308。

+0

這沒有幫助。我更新了我的帖子,使其更清楚。 – tmighty

+0

爲什麼?真的看不到,但也許我錯過了什麼? – Szymon

+0

在for-next-statement之後,我想避免計算平均值。如果可能的話,我想在每個之後進行計算。順便說一句,我正在使用VB6,其中變量不能保存真正的海量數據,不像VB.NET。 – tmighty