[英]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.