繁体   English   中英

输入的字符串格式不正确。 C#(新)

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

另外,您可能会考虑

  1. 使用TryParse而不是Parse来确保未解析的数字不会导致您出现异常问题。
  2. 使用ToString()打印您的数值计算结果,
  3. 检查TryParse的结果并
  4. 当心您可能会在原始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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM