Формат IEnumerable <double>при отображении в консоли - PullRequest
1 голос
/ 20 февраля 2012

Мне нужно отформатировать коллекцию от двух до двух десятичных знаков и отобразить ее в консольном приложении, разделив ее запятой (,).

Я использовал следующее:

var result = GetResults() //returns 1.234125, 3.56345, 6.43254

Console.WriteLine(string.Join(",",result)

Однако это не форматирует значения в 2 десятичных знака. Я смотрю на консоль 1.23,3.56,6.43. Кроме того, элементы в коллекции «result» могут варьироваться в пределах нескольких 1000 дублей. Итак, я ищу оптимизированный фрагмент кода, который не будет включать в себя никакой упаковки и займет меньше времени для отображения себя на консоли.

Спасибо, -Mike

Ответы [ 2 ]

5 голосов
/ 20 февраля 2012
0 голосов
/ 20 февраля 2012
Класс

Console эффективно буферизирует все полученные данные, поэтому множественные вызовы Console.Write фактически не снижают производительность. Также вам не нужно собирать весь текст в один большой кусок. Итак, мой ответ:

IEnumerable<double> result = new double[] { 1.1234, 2.2345, 3.3456 };
foreach (double item in result)
    Console.Write ("{0},", item.ToString("0.00"));
Console.WriteLine ();

Явный double.ToString вызов позволяет избежать ненужного бокса. Но я предлагаю вам сравнить производительность обоими способами, прежде чем использовать более сложную.

Также обратите внимание, что в некоторых культурах запятая уже используется в качестве дробного разделителя.

...