输入字符串的格式不正确

时间:2010-01-25 08:21:16

标签: c# type-conversion

我想计算百分比。但是编译器发出输入字符串格式不正确的错误。有人可以详细说明我在这里缺少的东西吗?

private double per()
{
  double a = Convert.ToDouble(tbEnglish.Text+tbUrdu.Text+tbPhysics.Text+tbChemistry.Text+tbMaths.Text);
  double d = 500;
  double lblResult = (a / d)*100;
  return lblResult;
 }

2 个答案:

答案 0 :(得分:4)

您正在连接字符串,然后尝试将该结果转换为double。因此,对于75.6,92.1,56.3 78.2和72.3的结果,您最终会尝试解析“75.692.156.378.272.3”。

解析每个值,然后求它们。

但是,我强烈建议您使用decimal代替double。您还应该考虑使用TryParse而不是Parse,以便您可以优雅地处理用户输入错误。这是坚持Parse的解决方案:

public decimal AveragePercentage()
{
    decimal sum = decimal.Parse(tbEnglish.Text) +
                  decimal.Parse(tbUrdu.Text) +
                  decimal.Parse(tbPhysics.Text) +
                  decimal.Parse(tbChemistry.Text) +
                  decimal.Parse(tbMaths.Text);
    return sum / 5m;
}

出于兴趣,您的原始代码为什么要除以500然后再乘以100?为什么不只是除以5(就像我现在已经注意到发生了什么)?

作为旁注,区分编译时错误和执行时错误非常重要。 不是编译器说输入字符串的格式不正确 - 它是执行时的Convert.ToDouble方法。在这种情况下,它是相对明显的,但在其他情况下,我们可能一直在追逐我们的尾巴,试图在执行时实际失败时找到编译时问题。

答案 1 :(得分:0)

我的Linux机箱上没有可用的Visual Studio,但我认为你最好使用这样的代码。

private double per()
{
   double a = Convert.ToDouble(tbEnglish.Text);
   a += Convert.ToDouble(tbPhysics.Text);
   a += Convert.ToDouble(tbChemistry.Text);
   a += Convert.ToDouble(tbMaths.Text);
   double d = 500;
   double lblResult = (a / d)*100;
   return lblResult;
}

在您的示例中,您最终构建了一个字符串,它看起来像:“75.692.156.372.3”,无法解析为double。

在使用+运算符之前,您需要将所有TextBox.Text值转换为Decimal。