簡體   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