繁体   English   中英

尝试double.Parse()时发生System.Format.FormatException

[英]System.Format.FormatException when trying double.Parse()

我的程序抛出System.FormatException: "The entrystring has the wrong format." 每当我尝试运行此代码时:

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的Encodings来运行它。 这些都不起作用。

要了解我的代码:

我从另一个函数调用该函数,并且CoordString参数看起来像这样: 90 10 1000所以它们都是Integer,但是我需要将它们作为double。 (我尝试过Int32.Parse() ,然后将其转换为double,在这里它在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); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM