[英]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.a
或1. .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
,例如),則必須通過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";
}
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.