System.Format.FormatException试图double.Parse()

问题描述:

我的程序抛出一个System.FormatException: "The entrystring has the wrong format."每当我试图运行此代码时:System.Format.FormatException试图double.Parse()

public double[] ReturnCoordsFromString(string CoordString) 
    { 
     string[] cArrStr = CoordString.Split(' '); 

     List<double> NumList = new List<double>(); 

     foreach (string elem in cArrStr) 
     { 
      Console.WriteLine(elem); 
      double b = Convert.ToDouble(elem); // <= Error is here 
      NumList.Add(b); 
     } 
     double[] retN = NumList.ToArray<double>(); 

     return retN; 
    } 

我也试图与Convert.ToDouble(elem)和编码的ASCII码,UTF_8运行。这些都没有奏效。

要理解我的代码:

我调用该函数从另一个函数和CoordString说法是这样的: 90 10 1000 所以他们都是整数,但我需要他们的两倍。 (我试过Int32.Parse(),然后转换为加倍,在这里它崩溃的Int32.Parse()部分)

我的代码应该得到CoordString("90 10 1000"),并把它分割成单串(["90", "10", "1000"])。 Console.WriteLine(elem)打印正确的数字,没有字母,只是数字作为字符串。

任何想法为什么/如何解决它?目前为止没有任何其他问题的建议。

编辑:

奇怪的是,打印elem也工作得很好。但例外窗口告诉我这一点:

b  0   double 
elem  ""  string 
// The class name here 
+0

elem的值是多少? –

+0

elem始终是来自'CoordString.Split('')'数组的每个单独的字符串。它总是数字作为字符串,所以首先它的'90',然后'10',然后'1000' –

+0

我只是尝试你的代码,它工作得很好。你确定输入字符串看起来像这个'“90 10 1000”'? –

您可能有一个双引脚空间导致问题。尝试指定StringSplitOptions.RemoveEmptyEntries

string[] cArrStr = CoordString(' ', StringSplitOptions.RemoveEmptyEntries) 

代替

string[] cArrStr = CoordString.Split(' '); 

此外,你应该使用Double.TryParse而不是Convert.ToDouble,因为Double.TryParse只会返回false时,它不能转换,而Convert.ToDouble将抛出一个异常:

所以用这个:

double b; 
if(Double.TryParse(elem, out d)) 
{ 
    // value is a double 
} 

而不是

double b = Convert.ToDouble(elem);