如何获得List<>的最大值在double数据类型中

时间:2017-07-14 12:57:24

标签: c# list double max

我正在尝试从begin_date = pd.to_datetime('2017-05-01') (df1.set_index('date')[begin_date: begin_date + pd.Timedelta("5 days")] .join(df2)) 获取Max值,但它会将舍入值返回到List<>。有什么特别的方法可以解决这个问题吗?

integer

编辑: 根据要求提供数据:

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);
            }

所以我不认为喂养方面是错误的。而对于整个图片,您可以在这里看到ChartData类型:

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; } } 如何变得简单List

class

4 个答案:

答案 0 :(得分:1)

此处有两个可能的方案。

  1. 当您将值输入列表时,您将对值进行四舍五入(如@sam在评论中所述)。

  2. 您期望以0结尾的double值显示这些小数位。双倍总是从无足轻重的数字上掉下来。例如,1.500将被截断为1.5。这就是双打的意图。另一篇简要讨论这个问题的文章是Double Skips last decimal if zero。如果您正在寻找不同的 Visual 输出,我建议将结果转换为字符串,然后使用字符串格式。一个例子如下(使用2位小数):

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

答案 1 :(得分:0)

double不会保留微不足道的数字。 - 9和9.0之间没有区别9.0000

如果您只想显示目的,请参阅此链接C# Double - ToString() formatting with two decimal places but no rounding,将double转换为带小数位的字符串。但是,如果你使用计算,则不需要保留小数位。

答案 2 :(得分:0)

很可能问题在于你插入到列表中的方式,正如一些人在这里建议的那样(你提到了舍入到整数,所以我假设它可能与视觉显示无关)。

尝试在列表中调试您的数据:

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

填充列表的方式可能存在以下问题:

{{1}}

添加到dataX中的数据实际上是一个整数(因为除以2会返回一个整数)。

答案 3 :(得分:0)

好的,我发现了错误。我一直在计算不同数组的最大值。所以无论如何我得到了正确的最大值。应该有:

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

而不是

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

所以我猜,这没有太大帮助,所以在你意识到我做了基本的错误之后我会删除这个问题。

无论如何,谢谢大家。