Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb6 VB:计算udt数组的平均值/平均值_Vb6_Average_Mean - Fatal编程技术网

Vb6 VB:计算udt数组的平均值/平均值

Vb6 VB:计算udt数组的平均值/平均值,vb6,average,mean,Vb6,Average,Mean,我有一个结构数组 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.

我有一个结构数组

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
那会有用的,但我有很多。计数和高。值,我担心溢出

Dim cAll as Double
请问我还能做什么

如果数组变得非常大,我将得到一个溢出无论如何。我能不能在下一次报表中重新计算平均值?我想是的,但我能想出一个优雅的解决办法


是的,我知道,代码是一种伪代码…

声明
调用
双重
以避免溢出

Dim cAll as Double
然后

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

双范围大约为±1.7×10^308。

VB.Net不再支持
Type
声明。现在是
结构
。你在用vb.net吗?我在用VB6。但我认为答案可以是.NET,我可以把它翻译成VB6,除非有人建议使用.NET更强大的功能来容纳大量的数字。我建议使用LINQ——当然,你不能把它翻译回VB6。另外,vb.net也没有任何问题,因为它将
single
赋值给乘法结果,乘法结果可以容纳相当大的数字;)那没用。我更新了我的帖子,让它更清晰。为什么?我真的看不出来,但也许我遗漏了什么?我想在下一次陈述后不去计算平均值。如果可能的话,我想在每次之后计算。顺便说一句,我使用的是VB6,其中变量不能容纳大量的数据,不像VB.NET.VB6,双倍最大值是1.79E+308,你认为你需要更多吗?