我正在尝试从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
答案 0 :(得分:1)
此处有两个可能的方案。
当您将值输入列表时,您将对值进行四舍五入(如@sam在评论中所述)。
您期望以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>();
所以我猜,这没有太大帮助,所以在你意识到我做了基本的错误之后我会删除这个问题。
无论如何,谢谢大家。