2012-03-23 4 views
1

Я пытаюсь сделать некоторое форматирование чисел, и я ищу элегантный способ форматирования чисел в списке. В качестве примера вот мой список:C# Минимальное количество значимых цифр

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

Это должно быть 'Select', а не' ForEach'. – SLaks

+2

Почему все понимали вопрос? – SLaks

+0

@SLaks: Исправлено Select(), спасибо. И да, почти все, похоже, неправильно поняли вопрос ... – Mark

ответ

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

The> 2 должно быть> 1 в противном случае спасибо. – Mark

+0

Выглядит правильно. Я не понимал, что ему нужно одинаковое число десятичных знаков для всех чисел. Я думал, что он ищет индивидуальное форматирование для отображения различий там, где это уместно, что приводит к неровному результату. Но этот код делает то, что делает его пример кода. – Tormod

Смежные вопросы