C#最小有效数字

时间:2012-03-23 05:02:43

标签: c# c#-4.0

我正在尝试进行一些数字格式化,而我正在寻找一种优雅的方式来格式化列表中的数字。以下是我的清单:

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 += "#";
   }
}

1 个答案:

答案 0 :(得分:4)

string format = "#.";
while (list.GroupBy(x => x.ToString(format))
           .Any(g => g.Count() > 1)
      ) {
    format += "#";
}