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

8

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

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

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

我遇到了以下错误:

无法将'type'类型的字符串转换为'double'

我看到了一个类似的问题是关于如何将整数转换为双精度浮点数的。但我有一个字符串列表需要转换为双精度浮点数列表,ConvertAll()和Select扩展方法都不起作用。请问有人能帮帮我吗?


1
ConvertAll()和Select扩展方法都无法工作 - 出了什么问题?编译器错误?异常?还是其他什么问题?您能提供代码吗? - Tim Robinson
我一直在遇到错误 - 无法将类型“string”转换为“double”,但Mark的答案有效!! - Vishal
你不能将字符串转换为双精度浮点数(字符串不支持显式转换为双精度浮点数 --> http://msdn.microsoft.com/en-us/library/xhbhezf4%28v=VS.80%29.aspx)。你只能像下面的答案所示,将其解析为双精度浮点数。 - digEmAll
5个回答

23

如果你使用的是 .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


4
您可以使用LINQ:
List<double> myList = myStringlist.ConvertAll(item => double.Parse(item));

请注意,解析双精度浮点数和单精度浮点数是很复杂的 - 只需考虑以下情况:
100,00 100.00
-> 不同的区域设置

1
你可以使用 List 的 ForEach 方法。
List<double> dbl= new List<double>;
stringList.ForEach( str=> dbl.Add( double.parse( str ) ) );

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);
}

0
希望这个可以工作: List tmpDouble = tmpString.Select(x => (double ?)Convert.ToDouble(x)).ToList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接