繁体   English   中英

为什么我会收到FormatException?

[英]Why am I getting FormatException on this?

我正在尝试将System.string转换为System.double ,输入为: He: 4.002602 amu

码:

string[] data = line.Replace(" ", "").Replace("amu", "").Split(new char[] { ':' }); 
double i = Convert.ToDouble(data[1]);

我努力了:

string[] data = line.Replace(" ", "").Replace("amu", "").Split(new char[] { ':' }); 
double i = Convert.ToDouble(data[1], CultureInfo.InvariantCulture);

代替Convert.ToDouble()使用double.Parse()方法,当用户输入始终使用句点符号作为十进制分隔符时,最好使用不变区域性。

所以尝试这样的事情:

double i = double.Parse(data[1], CultureInfo.InvariantCulture);

编辑:

我在上面评论中发布的屏幕快照中看到,在将data[1]传递给Convert.ToDouble方法之前,您实际上并未对其进行检查。

根据MSDN,抛出FormatException的唯一情况应该是在提供非数字文本值时( 请参阅此处 )。 因此,我建议在之前添加对空字符串和null值的检查,然后将值传递给Convert.ToDouble()方法。 尝试将代码更新为以下形式:

foreach (string line in raw) {
    string[] data = line.Replace(" ", "").Replace("amu", "").Split(new char[] { ':' }); 
    if (!string.IsNullOrWhiteSpace(data[1]) {
        double i = Convert.ToDouble(data[1], CultureInfo.InvariantCulture);
    } else {
        // Invalid value in data[1]
        // Maybe set a breakpoint here and investigate further if necessary
    }
}

如果仍然抛出FormatException异常,那么data[1]的内容必须是一些非数字和非空的文本值,因此在这种情况下,您应该使用调试器检查data数组的内容,并找出如何/为什么无效值到达那里。

如果输入格式是+空格 + doubleNumber + 空格+东西 ,则可以使用以下代码:

string line = "He: 4.002602 amu";

int intLspacePos = line.IndexOf(" ") + 1;
int intRspacePos = line.LastIndexOf(" ");

string strNumber = line.Substring(intLspacePos, intRspacePos - intLspacePos);
double dblNumber = Convert.ToDouble(strNumber);

您可以使用以下正则表达式,而无需分割由数字和单词组成的字符串:

// using System.Text.RegularExpressions

var resultString = Regex.Match(line, @"\d.\d+").Value;

您可以使用以下特定的文化信息进行转换。 2057是英语(英国)的LCID。

双重我= Convert.ToDouble(数据[1],CultureInfo.GetCultureInfo(2057));

暂无
暂无

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

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