如何在c#中使用datagridview获得最接近的double值?

时间:2017-07-25 08:39:30

标签: c# winforms math datagridview

我有一个datagirdview,显示来自gps的时间和速度信息。我希望datagridview显示每10次速度的数据,时间显示经过的时间。我的意思是;

speed time 10 0,31 20 0,75 30 0,95 .. ..

然而,我遇到了一些问题,例如我不能总是像我想的那样清楚地获得价值。例如,如果我想将datagridview中的速度和时间从20到60视为速度。它显示;

speed time 10 0,31 20 0,75 40 0,95 60 1.25

如上所述,它错过了一些值(30和50的值不存在)。为了解决这个问题,我希望得到最接近我的条件的值(下一个数据)。

让我告诉你我的数据和我想要的东西;

这是数据
speed time 10 0,31 13 0,35 16 0,40 19 0,45 22 0,48 25 0,51 28 0,54 31 0,58 34 0,62 .. ..

这就是我想看到的

speed time 10 0,31 22 0,48 31 0,62

这有什么功能吗?

EDIT 我在列表框中收集数据(listboxvelocity和listboxtime),label1显示速度,label2显示已用时间,我从列表框获取数据到datagridview。顺便说一句,我使用计时器收集数据,这是我的代码,

int p;
Stopwatch watch=new Stopwatch();

private void timer2_Tick(object sender, EventArgs e)
    {
      listBoxTime.Items.Add(label2.Text);
      listBoxVelocity.Items.Add(label1.Text);
      p = dataGridView1.Rows.Add();
      watch.Start();
      var time = watch.Elapsed.TotalSeconds;
if (Math.Round(Convert.ToDecimal(label1.Text),0)%10==0 || 
    Convert.ToDecimal(label1.Text)==0)
  { 
       for (int i = 1; i < listBoxTime.Items.Count; i++)
           {
  dataGridView1.Rows[p].Cells[0].Value =listBoxVelocity.Items[i].ToString(); 
  dataGridView1.Rows[p].Cells[1].Value =  listBoxTime.Items[i].ToString();
           }
  }

EDIT2 我有两个按钮来创建人工速度来模拟代码。当我开始增加label1的值(作为速度)时,它捕获真正的值,但它不会将其保存在datagridview1中。 Datagirdview1始终显示最新值,该值是其所有行中最近十年的最接近的值。这是最终的代码。

 private void timer2_Tick(object sender, EventArgs e)
    {
        watch.Start();
        var time = watch.Elapsed.TotalSeconds;
        label2.Text = String.Format("{0:00.00}", time);
        List<DataPoint> liste = new List<DataPoint>();

       liste.Add(new DataPoint(Convert.ToDouble(label1.Text), Convert.ToDouble(label2.Text)));
      dataGridView1.DataSource = liste;
      List<DataPoint> newlist = new List<DataPoint>();
      for (int q = 10; q < liste.Max(t => t.Speed); q += 10)
     {
      newlist.AddRange(liste.Where(t => t.Speed % q == liste.Select(v => v.Speed % q).Min()).ToList());

      }
      dataGridView1.DataSource = null;
      dataGridView1.DataSource = newlist;
    }

  private void button1_Click(object sender, EventArgs e)
    {
           x += 3;
            aquaGauge1.Value =Convert.ToSingle(x);
            label1.Text = x.ToString();

    }

    private void button2_Click(object sender, EventArgs e)
   {          
            x -= 3;
            aquaGauge1.Value = Convert.ToSingle(x);
            label1.Text = x.ToString();

    }

0 个答案:

没有答案