C#从字符串中解析值

时间:2011-04-07 22:11:24

标签: c# string

我想像这样解析字符串值:

.02234 
-.23455 
-1.23345 
2. 
.3 

但是我得到了一个FormatException

 for (int i = 1; i < 7; i++)
 {
     var item =  Double.Parse(reader.ReadLine(44).Substring(8 * i, 8));
     richTextBox1.Text += item.ToString() + "\n";  
 }

enter image description here

我应该将这个数字转换为“0.2”或“-0.541”以加倍或任何值类型来解决这个问题!!!

5 个答案:

答案 0 :(得分:1)

您传递的字符串不是双精度型,如1.a1. .3(1个字符串代表2个数字)

您可以使用Double.TryParse()并且它不会抛出异常,但如果成功与否则返回true / false。它可能会使流动更容易。

答案 1 :(得分:1)

由于您已发表评论,是您的语言环境中的小数点分隔符,因此有一个比.,的字符串替换更好的选项;告诉Double.Parse()方法使用不同的数字格式。

请参阅Parse(String s)的MSDN文档。特别要注意以下几点:

  

s 参数使用解释   a中的格式信息   NumberFormatInfo对象是   为当前线程初始化   文化。有关详细信息,请参阅   CurrentInfo。使用解析字符串   一些格式化信息   其他文化,称之为   Double.Parse(String,IFormatProvider)   或Double.Parse(String,NumberStyles,   IFormatProvider)方法。

假设您当前的线程文化使用的数字格式将,视为小数点分隔符(例如法语/法语fr-FR),则必须将IFormatProvider传递给将Parse()定义为小数分隔符的.方法。方便的是,“没有特定文化”的文化CultureInfo.InvariantCulture就是这样做的。

所以这段代码应该成功解析:

for (int i = 1; i < 7; i++)
{
    // Assume the substring of ReadLine() contains "-.23455", for example
    var item = Double.Parse(reader.ReadLine(44).Substring(8 * i, 8), CultureInfo.InvariantCulture);
    richTextBox1.Text += item.ToString() + "\n";  
}

答案 2 :(得分:0)

reader.ReadLine(44).Substring(8 * i, 8).ToString()

您不需要.ToString()。确认这实际上返回了您正在寻找的值。

格式异常是throw,因为它尝试解析的值无效! 我的第一个猜测是,你传递的论点实际上并不是双重的。

可能会尝试分开你的电话,并在断点处查看实际情况。

 for (int i = 1; i < 7; i++)
 {
     string textNum = reader.ReadLine(44).Substring(8 * i, 8);
     // add a breakpoint on the next line, then look at textNum. I bet it's not what you hoped.
     double item =  double.Parse(textNum);
     richTextBox1.Text += string.Format("{0}\n", item);  
 }

答案 3 :(得分:0)

使用Double.TryParse()并测试以查看该值是否已成功解析为您的局部变量,如下所示:

for (int i = 1; i < 7; i++)
{
    double value = 0;
    string input = reader.ReadLine(44).Substring(8 * i, 8);

    if (Double.TryParse(input, out value))
    {
        richTextBox1.Text += value.ToString() + "\n";  
    }
    else
    {
        richTextBox1.Text = "Invalid double entered.";
    }
}

答案 4 :(得分:0)

我找到问题的解决方案(用逗号代替点):

    public Double[] GridValues(int fromline) 
    {
        Double[] values = new Double[7];
        for (int i = 1; i < 7; i++)
        {
            string input = ReadLine(fromline).Substring(8 * i, 8).Replace(".", ",");
            values[i-1] = double.Parse(input);
        }

        return values;
    }