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
答
您可能有一个双引脚空间导致问题。尝试指定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);
elem的值是多少? –
elem始终是来自'CoordString.Split('')'数组的每个单独的字符串。它总是数字作为字符串,所以首先它的'90',然后'10',然后'1000' –
我只是尝试你的代码,它工作得很好。你确定输入字符串看起来像这个'“90 10 1000”'? –