以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]数组相关 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=118742) |
-- 作者:积水成渊 -- 发布时间:2018/5/10 8:54:00 -- [求助]数组相关 函数:GetValues是从表中筛选不重复的数据以集合的形式返回,我现在需要不去除重复,有没有类似的函数 [此贴子已经被作者于2018/5/10 8:54:39编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/5/10 9:17:00 -- 参考
http://www.foxtable.com/webhelp/scr/0400.htm
|
-- 作者:积水成渊 -- 发布时间:2018/5/10 9:56:00 -- 老师,麻烦帮我改下这段代码,datarow怎么转换成double类型: Dim r As Row = Tables("工作业绩").Current Dim drs As List(Of DataRow) Dim Arys() As DataRow drs = DataTables("工作业绩进度记录").Select("[Cid] = \'" & r("Pid") & "\'") Arys = drs.ToArray() array.sort(Arys) Dim sum As Double = 0 For i As Integer = 1 To Arys.length - 2 sum += Arys(i) output.show(Arys(i)) Next msgbox(sum / (Arys.length - 2)) [此贴子已经被作者于2018/5/10 9:56:36编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/5/10 10:15:00 -- Dim r As Row = Tables("工作业绩").Current Dim sum As Double = 0 |
-- 作者:积水成渊 -- 发布时间:2018/5/10 10:26:00 -- 感谢老师,问题解决了 |
-- 作者:积水成渊 -- 发布时间:2018/5/10 11:02:00 -- 老师,经过测试发现一个问题,这段代码其实我是想通过数组,去除一个最高值,和一个最低值之后求平均值的,老师帮我修改后的代码在正数的情况可以无误的求出平均值,但是在有负数的情况下,这个代码求出来的平均值就不正确了,例如我我通过代码获取的集合是{1,-1,5},代码求出的平均值为-1,二实际上我需要算出的平均数应该为1。所以这段代码还应该如何处理下: Dim r As Row = Tables("工作业绩").Current Dim drs As List(Of DataRow) drs = DataTables("工作业绩进度记录").Select("[Cid] = \'" & r("Pid") & "\'", "进度") Dim sum As Double = 0 For i As Integer = 1 To drs.count - 2 sum += drs(i)("进度") output.show(drs(i)("进度")) Next r("进度") = sum / (drs.count - 2) |
-- 作者:有点甜 -- 发布时间:2018/5/10 11:05:00 -- 1、你进度列,必须是【整数或者双精度小数】
2、drs = DataTables("工作业绩进度记录").Select("[Cid] = \'" & r("Pid") & "\'", "进度") 是排序了的 |
-- 作者:积水成渊 -- 发布时间:2018/5/10 11:27:00 -- 感谢 |
-- 作者:积水成渊 -- 发布时间:2018/5/10 16:13:00 -- 因为进度字段需要设置成真实值与显示值的效果,所以只能设置成字符型,如果将进度字段设置成整型或者浮点型,那么界面上的显示值就为空白了。所有我舍弃了这种集合的方式求平均值,直接用SQL语句来实现平均值的求法。 Dim t1 As Table = Tables("不足之处") Dim r As Row = t1.Current Dim cmd As New SQLCommand Dim avg As double cmd.C cmd.CommandText = "selec t (SUM(convert(numeric(28,3),同事评价))-MAX(convert(numeric(28,3),同事评价))-MIN(convert(numeric(28,3),同事评价)))/(case when count(*)>=3 then (count(*)-2) else count(*) end) f rom {创新展示评价记录} where Cid = \'" & r("Pid") & "\'" avg = cmd.ExecuteScalar() r("同事评价") = avg t1.Save [此贴子已经被作者于2018/5/10 16:17:36编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/5/10 16:15:00 -- 再加入一个表达式列,引用【进度】列的值即可。使用此表达式列处理。 |