C # Минимальное количество значащих цифр - PullRequest
1 голос
/ 23 марта 2012

Я пытаюсь отформатировать числа и ищу элегантный способ форматирования чисел в списке. В качестве примера вот мой список:

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 Ответ

4 голосов
/ 23 марта 2012
string format = "#.";
while (list.GroupBy(x => x.ToString(format))
           .Any(g => g.Count() > 1)
      ) {
    format += "#";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...