[英]Input string was not in a correct format. c# (New)
我有“输入字符串的格式不正确”。 此代码错误
rainTb.Text = " " + int.Parse(parsed[0]) * 100 / 1023;
我的代码没有错误。 除了上面的错误。 我已经进行了计算以通过串行通信(电缆)从Arduino硬件中提取模拟值(以上计算)。 Arduino工作正常。 一切都很好,尽管直到出现此错误...为什么? 哭泣
p / s:我已经经历了许多解决方案,但是仍然..所以我现在在这里。 对不起我的英语不好
private void ProcessCOMRx(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(COMRx))
{
systemTb.Text = "Processing Data...";
systemTb.BackColor = System.Drawing.Color.Lime;
string [] parsed = COMRx.Split(',');
int curveNo;
if (parsed.Count() > zedAll.GraphPane.CurveList.Count())
curveNo = zedAll.GraphPane.CurveList.Count();
else
curveNo = parsed.Count();
for (int k = 0; k < curveNo; k++)
{
for (int j = zedAll.GraphPane.CurveList[k].NPts - 1; j > 0; j--)
{
zedAll.GraphPane.CurveList[k].Points[j].Y = zedAll.GraphPane.CurveList[k].Points[j - 1].Y;
}
double temp = 0;
try
{
temp = double.Parse(parsed[k]);
}
catch
{
systemTb.Text = "Parse Error";
systemTb.BackColor = System.Drawing.Color.Red;
}
rainTb.Text = "" + int.Parse(parsed[0]) * 100 / 1023;
phTb.Text = "" + (3.5 + int.Parse(parsed[1]) * 4.5 / 1023);
moistTb.Text = "" + int.Parse(parsed[2]) * 100 / 1023;
tempTb.Text = "" + int.Parse(parsed[3]) * 100 / 1023;
zedAll.GraphPane.CurveList[k].Points[0].X = 0;
zedAll.GraphPane.CurveList[k].Points[0].Y = temp;
}
}
else
{
this.BeginInvoke(new EventHandler(processPumpStates));
}
}
发生这种情况的可能性极小。 一种是因为(1) parsed[0]
数字太大 ,另一种是因为parsed[0]
包含(2)非数字,(3)无法识别的千位分隔符或(4)十进制分隔符(不应存在)在int
解析中),以适用于您的代码。
在所有情况下,请使用Visual Studio调试器检查parsed[0]
的值,并确保其具有int
范围的纯可接受数字格式。 就像是:
1234
另外,您可能会考虑
TryParse
而不是Parse
来确保未解析的数字不会导致您出现异常问题。 ToString()
打印您的数值计算结果, TryParse
的结果并 int.Parse(parsed[0]) * 100 / 1023
执行的整数除法: 像这样:
int val;
bool result = int.TryParse(parsed[0], out val);
if (!result)
return; //something has gone wrong
Textbox1.Text = " " + (val * 100d / 1023d).ToString(); //note the d
如果parsed[0]
包含的值是可转换的字符串,则您在代码中可以正常使用此错误,否则代码会抛出异常。 也就是说, parsed[0]
内容不能转换为整数,在这种情况下,应使用int.TryParse代替int.Parse,它具有内部错误处理,可帮助您确定转换是否成功或不。
因此,代码如下所示:
int tempNumber=0;
if (int.TryParse(parsed[0], out tempNumber))
{
Textbox1.Text = " " + (tempNumber * 100 / 1023).ToString();
}
else
{
Textbox1.Text= "invalid zipCode";
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.