2017-07-14 29 views
0

我试图从List<>获得Max值,但它返回的值为四舍五入值integer。有什么特别的方法来处理这个问题吗?如何在双数据类型中获取List <>的最大值

private List<double> dataX = new List<double>(); 

double maxVal = dataX.Max<double>(); 
Debug.WriteLine("max: " + maxVal); 

编辑: 如这里要求是喂养数据:

for (int i = 0; i < 10; i++) 
      { 
       data.Add(new ChartData(i, rand.NextDouble() * 10)); 
       Debug.WriteLine(data.Last<ChartData>().Y); 
      } 

我的调试窗口中显示了这个:

5,9358753151893 
7,87125875608588 
3,77212246589927 
9,36056426230844 
2,27154730924943 
9,80201833872218 
5,7350595275569 
3,04650606729393 
5,81677517658881 
0,0514464220271662 
max: 8 

所以我不认为供电侧是错误的。而对于整个画面,在这里你可以看到ChartData类型:

public class ChartData 
    { 
     public double X { get; set; } 
     public double Y { get; set; } 

     public ChartData(double X, double Y) 
     { 
      this.X = X; 
      this.Y = Y; 
     } 
    } 

而且我如何从我的ChartData class越来越简单List

private List<ChartData> data = new List<ChartData>(); 
private List<double> dataX = new List<double>(); 

void updateMaxMin() 
     { 
      dataX.Clear(); 
      dataY.Clear(); 

      for (int i = 0; i < data.Count - 1; i++) 
      { 
       dataX.Add(data[i].X); 
       dataY.Add(data[i].Y); 
      } 
     } 
+3

你喂食的时候大概四舍五入。 Max工作得很好。 – sam

+1

它工作正常https://dotnetfiddle.net/BQ8vBJ – Tuco

+1

显示你填写名单,你看错了地方 –

回答

0

好的,我发现错误。我一直在计算不同阵列的最大值。所以我得到了正确的最大值。应该有:

double maxVal = dataY.Max<double>(); 

,而不是

double maxVal = dataX.Max<double>(); 

所以我想,这是没有太大的帮助,所以你才意识到自己做了基本的故障后,我会删除这个问题。

谢谢大家。

1

这里有两种可能情景

  1. 当您将它们输入到列表中(正如他的评论中提到的@sam)时,您将舍入值。

  2. 您期待以0结尾的双值来显示这些小数位数。双将永远放弃无足轻重的数字。因此,例如,1.500将被截断为1.5。这是双打打算如何工作。另一篇文章简单地谈到这个是Double Skips last decimal if zero。如果您正在寻找不同的Visual输出,我建议将结果转换为字符串,然后使用字符串格式。示例如下(使用2位小数):

    Console.WriteLine(string.Format(“max:{0:0.00}”,maxVal));

0

最有可能的问题是你插入到列表中的方式,正如一些人在这里提到的(你提到的四舍五入为整数,所以我假设它可能不是与视觉显示相关的)。

尝试列表中的调试数据:

private List<double> dataX = new List<double>(); 

... 

foreach(var data in dataX) 
{ 
    Debug.WriteLine("data: " + data); 
} 

double maxVal = dataX.Max<double>(); 
Debug.WriteLine("max: " + maxVal); 

一个可能的问题与您填充列表的方式可能是这样的:

var myNum = new[] { 1, 2, 3, 4, 5, 6 }; 
foreach (var num in myNum) 
{ 
    dataX.Add(num/2); 
} 

已添加到DATAX是数据实际上是一个整数(如2除以返回一个整数)。

相关问题