标题:详解比较
只看楼主
guojun1119
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2012-9-9
结帖率:76.92%
已结贴  问题点数:20 回复次数:4 
详解比较
条件:
datagridview1
ID  Name  Value(m)
1   张三   1.6
2   李四   1.4
3   王五   1.2
4   赵六   1.0
txtbox1  标准1.1m
要求:
 我想把上面datagridview1中value中的值与标准值做个比较,选取差值就近的两人,把两人的名字输入到txtbox2中;得到结果“王五赵六”
实现代码如下:
                double b = Convert.ToDouble(this.textBoxX1.Text);
                double m=999;
                int[] j = new int[dataGridView1.Rows.Count];
                int n = 0;
                for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    double a = Convert.ToDouble(dataGridView1.Rows[i].Cells[2].Value);
                    if (Math.Abs(a - b) <= m)
                    {
                        m = Math.Abs(a - b);
                        j[n] = i;
                        n++;
                    }
                }
                for (int t = 0; t < n; t++)
                {
                    textBoxX2.Text += dataGridView1.Rows[j[t]].Cells[1].Value.ToString();
                }
实现问题:出现的结果是“张三王五”,请问代码哪里有误,请帮忙解决详细点,在此不慎感激!
搜索更多相关主题的帖子: double 
2012-10-23 22:18
belin2000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:975
专家分:194
注 册:2004-6-2
得分:10 
double b = Convert.ToDouble(this.textBoxX1.Text);
List<int> list=new List<int>();
double m=999;

for (int i = 0; i < dataGridView1.Rows.Count; i++)
                {
                    double a = Convert.ToDouble(dataGridView1.Rows[i].Cells[2].Value);
                    if (Math.Abs(a - b) <= m)
                    {
                        m = Math.Abs(a - b);
                        if(list.count>=2)
{
        list.RemoveAt (0);
        list.add(i);
}                  
else
{list.add(i);}     
                    }
                }
for (int t = 0; t < 2; t++)
                {
                    textBoxX2.Text += dataGridView1.Rows[list[t]].Cells[1].Value.ToString();
                }
思路是这样,没做调试,自己修改下哦!

59ita点com(我就爱TA)
2012-10-24 00:12
guojun1119
Rank: 1
等 级:新手上路
帖 子:39
专家分:0
注 册:2012-9-9
得分:0 
回复 2楼 belin2000
首先,谢谢你的帮助;
其次,是被我的datagridview1中的例子有点误解了,其实datagridview1并不是指身高,它可以是任意的值,还有还回到txtbox2中的名字不一定是只有2人,比如我在txtbox1中输入1.55,那txtbox2中应该返回张三,就可以了;
最后,我是新手,希望继续得到帮助
2012-10-24 09:35
smart0721
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:106
专家分:468
注 册:2012-2-10
得分:10 
回复 3楼 guojun1119
楼主的意思是,通过比较差值,取最小差值的人,如最小差值只有一人,而返回一人,如同时多人达到差值相等并为最小,那返回多人?
PS:2楼那样写依然是返回王五赵六,因为i=0和i=3时(Math.Abs(a - b) <= m才为true;
2012-10-26 01:22
smart0721
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:106
专家分:468
注 册:2012-2-10
得分:0 
double b = Convert.ToDouble(this.textBoxX1.Text);
double m=Math.Abs(Convert.ToDouble(dataGridView1.Rows[0].Cells[2].Value) - b); //获取第一个数据与标准值比较
string str=Convert.ToDouble(dataGridView1.Rows[0].Cells["Name"].Value.Tostring().Trim();//定义字符串并赋初值为第一人的Name
for (int i = 1; i < dataGridView1.Rows.Count; i++)              //从第二人开始循环
 {
       double a = Convert.ToDouble(dataGridView1.Rows[i].Cells[2].Value);
       if (Math.Abs(a - b) < m)
       {
         m = Math.Abs(a - b);
         str=Convert.ToDouble(dataGridView1.Rows[i].Cells["Name"].Value.Tostring().Trim();
       }
      else if(Math.Abs(a - b) ==m)
       {
          str+=Convert.ToDouble(dataGridView1.Rows[i].Cells["Name"].Value.Tostring().Trim();

       }                  

}                                
textBoxX2.Text = str;
               
这样写应该可以实现你的想法!你可以试一下看看
2012-10-26 14:08



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-383916-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.117464 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved