我想计算百分比。但是编译器发出输入字符串格式不正确的错误。有人可以详细说明我在这里缺少的东西吗?
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;
}
答案 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。