[英]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.