将字符串数组转换为双精度浮点数数组

3
我有一个文本文件(.txt),其中包含一些小数数字:

0.3125
0.3
0.181818181818182
0.333333333333333
0.210526315789474
0.181818181818182

我想将这些数字转换为双精度数组。以下是我的代码:

double[] f1 = Convert.ToDouble(File.ReadLines("decimal list.txt").ToArray());

但我遇到了以下错误:

无法将类型“double”隐式转换为“double[]”


2
Convert.ToDouble 没有接受 double[] 作为参数的重载。您可能需要逐行读取文本文件并尝试解析每个值。 - Soner Gönül
1
.Select 怎么样? - crashmstr
7个回答

9
您可以使用 Linq:
您可以使用Linq:
  Double fi[] = File.ReadLines("list of stopword.txt")
                    .Select(x => Double.Parse(x, CultureInfo.InvariantCulture))
                    .ToArray();

3
File.ReadLines("decimal list.txt")
    .Select(l => Convert.ToDouble(l))
    .ToArray();

@GrantWinney 谢谢,确实是这样。 - Xiaoy312

1
您会收到错误,因为您试图将一个double(Convert.ToDouble)分配给一个double[]变量。相反,您需要将每行解析为双精度浮点数并创建一个数组。

您可以使用LINQ:

double value = 0;
double[] f1 = File.ReadLines("decimal list.txt")
    .Where(l => double.TryParse(l.Trim(), out value))  // skips invalid lines
    .Select(l => value)
    .ToArray();

1
唯一匹配的 Convert.ToDouble 重载是 接收 Object 的那个。这个函数和所有其他的 ToDouble 重载一样,都返回 double
public static double ToDouble(
    Object value
)

您正在尝试将一个双精度数分配给一个双精度数组,编译器告诉您它无法执行此操作。
当然,如果您将您的字符串数组传递给该Convert.ToDouble重载函数,它会导致运行时错误,因为Convert.ToDouble期望接收单个值,并返回单个值。它不能在单个调用中转换多个值。
您需要做的是将文件中的每一行转换为双精度数。一种有效的方法是使用Linq查询,正如其他答案所示。

0
你可以循环遍历字符串数组并使用Double.Parse或Double.TryParse(如果数组中可能有无法解析为double的字符串)。

0

这是因为 Convert.ToDouble 返回一个双精度浮点数,而你在左侧有一个双精度变量数组 double[]。

尝试改为:

List<double> list = new List<double>();
foreach(string line in File.ReadLines("list of stopword.txt"))
  list.Add(double.Parse(line));

0

类似以下代码(未经测试):

string[] lines = File.ReadAllLines("decimal list.txt");
List<doulbe> values = new List<double>();

foreach(string line in lines)
{
    double value;

    if (double.TryParse(line, out value))
    {
        values.Add(value);
    }
}

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