我想像这样解析字符串值:
.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”以加倍或任何值类型来解决这个问题!!!
答案 0 :(得分:1)
您传递的字符串不是双精度型,如1.a
或1. .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;
}