我正在尝试进行一些数字格式化,而我正在寻找一种优雅的方式来格式化列表中的数字。以下是我的清单:
List<double> list =
new List<double>(new double[] {34.8, 35.0, 35.7, 35.9, 38.0});
如果我使用list.ForEach(x => Console.WriteLine(x.ToString("#")))
打印这些,我会得到:
35
35
36
36
38
哪个不完全正确。我想显示最小数量的有效数字,以确保每个结果都是唯一的(假设没有重复)。所以对于上面的内容,格式化字符串将是“#。#”,这样我得到一个小数。
如果这些是数字:{35, 37, 40, 41, 42}
我不想使用“#。#”我想使用“#”因为我不想通过打印出“.0”来浪费空间什么时候不重要。
我只是非常担心小数点左边的数字位数。
这是我的黑客密码,但我希望有更优雅的方法来做到这一点。我基本上试图优化这个:
bool unique = false;
string format = "#."
List<string> strings = new List<string>();
while (!unique)
{
strings = List.Select(x => x.ToString(format)).Distinct().ToList();
if (strings.Count() == list.County())
{
unique = true;
}
else
{
format += "#";
}
}
答案 0 :(得分:4)
string format = "#.";
while (list.GroupBy(x => x.ToString(format))
.Any(g => g.Count() > 1)
) {
format += "#";
}