繁体   English   中英

C#从字符串中解析值

[英]C# parse value from 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";  
 }

在此输入图像描述

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

你传递的字符串不是双1.a ,比如1.a1. .3 (1个字符串代表2个数字)

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

既然你已经有了一个评论说,在语言环境的小数点分隔符,还有比这样的字符串替换一个更好的选择. , 告诉Double.Parse()方法使用不同的数字格式。

请参阅MSDN doc for Parse(String s) 特别注意以下几点:

使用为当前线程文化初始化的NumberFormatInfo对象中的格式信息来解释s参数 有关更多信息,请参阅CurrentInfo。 要使用其他文化的格式信息解析字符串,请调用Double.Parse(String,IFormatProvider)或Double.Parse(String,NumberStyles,IFormatProvider)方法。

假设你当前线程培养使用考虑的数字格式,以小数点分隔符(法国/法国fr-FR ,例如),则必须通过IFormatProviderParse()定义方法. 作为小数点分隔符。 方便的是,“没有文化特别”的文化, 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";  
}
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);  
 }

使用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.";
    }
}

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

    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;
    }

暂无
暂无

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

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