为什么我在这上面得到FormatException?

时间:2016-03-28 18:21:07

标签: c# string double formatexception

我正在尝试将 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);

4 个答案:

答案 0 :(得分:0)

而不是Convert.ToDouble()使用double.Parse()方法,最好在用户输入始终使用句点符号作为小数点分隔符时使用不变文化。

所以尝试这样的事情:

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

编辑:

我在上面评论中发布的屏幕截图中看到,在将data[1]传递给Convert.ToDouble方法之前,您实际上并没有检查FormatException的内容。

根据MSDN,抛出null的唯一情况应该是在提供非数字文本值(see here)时。因此,我建议先添加空字符串和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的内容必须是一些非数字和非空文本值,所以在这种情况下你应该检查{{1}的内容使用调试器的数组,找出无效值到达的原因/原因。

答案 1 :(得分:0)

如果输入格式是某事+空白 + 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);

答案 2 :(得分:0)

您可以使用以下正则表达式而不拆分与数字和单词混合的字符串:

// using System.Text.RegularExpressions

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

答案 3 :(得分:0)

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

double i = Convert.ToDouble(data [1],CultureInfo.GetCultureInfo(2057));