如何将字符串列表转换为双精度?

时间:2010-07-29 17:47:28

标签: c# string list double

  编辑:我之前尝试过这两种方式 -

List<double> doubleList =
stringList.ConvertAll(x => (double)x);

List<double> doubleList =
stringList.Select(x =>
(double)x).ToList();

并收到此错误:

  

无法将类型'string'转换为'double'

我读到了将int转换为双精度的similiar内容...但是我有需要转换为双精度列表的字符串列表,而ConvertAll()不能同时使用Select扩展方法。任何人都可以帮助我。

5 个答案:

答案 0 :(得分:17)

如果您使用的是.NET 3.5或更高版本,那么select方法应该可以工作:

List<double> result = l.Select(x => double.Parse(x)).ToList();

以下是一些示例代码:

List<string> l = new List<string> { (0.1).ToString(), (1.5).ToString() };
List<double> result = l.Select(x => double.Parse(x)).ToList();
foreach (double x in result)
{
    Console.WriteLine(x);
}

结果:

0,1
1,5

要注意的一件事是你用来解析字符串的文化。您可能希望使用带有区域性的Parse重载,例如使用CultureInfo.InvariantCulture

答案 1 :(得分:4)

您可以使用linq:

List<double> myList = myStringlist.ConvertAll(item => double.Parse(item));

请注意,解析双精度和浮点数很复杂 - 只需要想一想:

100,00 100.00

- &GT;不同的区域设置

答案 2 :(得分:1)

您可以使用List

的ForEach方法
List<double> dbl= new List<double>;
stringList.ForEach( str=> dbl.Add( double.parse( str ) ) );

答案 3 :(得分:0)

这个怎么样?

List<string> list = [your strings]
List<double> newList = new List<double>();
for(int i = 0; i < list.Count; i++)
{
  double d = 0;
  if(!double.TryParse(list[i], d)) //Error
  newList.Add(d);
}

答案 4 :(得分:0)

希望这可行:     列表tmpDouble = tmpString.Select(x =&gt;(double?)Convert.ToDouble(x))。ToList();