2010-12-31 5 views
4

Я с List<Double>C#: Математические функции

List<Double>lst=new List<Double>{ 1.0,2.409,3.0} 

Мне нужно преобразовать этот список в List<String>

Таким образом, результат должен содержать

{ "1","2.409","3"} 

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

Пожалуйста, помогите мне сделать это

ответ

0
 List<Double> lst=new List<Double>() { 1.0,2.409,3.0}; 
     List<string> output = lst.Select(val => val.ToString("0.######")).ToList(); 

должны делать то, что вы хотите

4

Если вы используете .NET 3.5 вы можете использовать Linq:

lst.Select(n => String.Format("{0:0.###}", n)); 

В противном случае, вы можете сделать этого длинный путь:

var output = new List<string>(); 

foreach (int number in lst) 
{ 
    output.Add(String.Format("{0:0.###}", number)); 
} 
+0

Это хорошо работает, например, в ФП, но а не «в общем», см. мой ответ. – arul

+0

@arul: Я понимаю, что формат строки, который я выбрал, является правильным для вопроса OP, но не в целом, но затем я отвечаю на вопрос OP :) –

+0

Ответ на вопрос, не правильный. .. d'oh. – arul

0
List lst = new List { 1.0, 2.409, 3.0 }; 
List newlist = lst.Select(val => val.ToString()).ToList(); 

Меньше письма ....

+0

извините за вопрос OT .... но почему не могу добавить комментарий к q & a not mine ???? –

+0

Вам нужно больше репутации, http://stackoverflow.com/faq – arul

1

Вот мой взгляд на это, что не зависит от культуры конкретной фракции сепаратора, ни фиксированное количество знаков после запятой:

var result = lst.Select(
    n => { 
    double truncated = Math.Truncate(n); 

    if(truncated == n) { 
     return truncated.ToString("0"); 
    } else { 
     return n.ToString(); 
    } 
    } 
); 
+0

Это не удалено :). Я действительно не могу понять, почему вы так делаете, 'String.Format' должен позаботиться о конкретных для вас областях. Или я чего-то не хватает? –

+0

@ Томас Янссон: Да :) Был еще один ответ: n => n.ToString(). TrimEnd ('.', '0') '. – arul

+0

@arul: это решение совершенно неверно :). Но я не думаю, что вы предлагаете это решение, вы должны использовать метод String.Format. Заметьте, что я не говорю, что ваше решение ошибочно, только для сложных :) –