Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 输入字符串的格式不正确_C#_Type Conversion - Fatal编程技术网

C# 输入字符串的格式不正确

C# 输入字符串的格式不正确,c#,type-conversion,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

我想计算一下百分比。但是编译器给出了一个错误,输入字符串的格式不正确。有人能详细说明我在这里遗漏了什么吗

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;
 }

您正在连接字符串,然后尝试将一个结果转换为双精度结果。因此,对于75.6、92.1、56.3、78.2和72.3的结果,您将尝试解析“75.692.156.378.272.3”

解析每个值,然后求和

但是,我强烈建议您使用
decimal
,而不是
double
。您还应该考虑使用<代码> TyPARSE < /C> >而不是<代码> PARSE < /C> >,以便您可以优雅地处理用户输入错误。下面是坚持解析的解决方案:

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
方法。在本例中,这是相对明显的,但在其他情况下,我们可能已经追根究底了一段时间,试图找到编译时的问题,但实际上它在执行时失败了。

您正在连接字符串,然后试图将一个结果转换为双精度。因此,对于75.6、92.1、56.3、78.2和72.3的结果,您将尝试解析“75.692.156.378.272.3”

解析每个值,然后求和

但是,我强烈建议您使用
decimal
,而不是
double
。您还应该考虑使用<代码> TyPARSE < /C> >而不是<代码> PARSE < /C> >,以便您可以优雅地处理用户输入错误。下面是坚持解析的解决方案:

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
方法。在本例中,这是相对明显的,但在其他情况下,我们可能已经追根究底了一段时间,试图找到一个编译时问题,但实际上它在执行时失败了。

我的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”的字符串,该字符串无法解析为双精度


在使用
+
操作符之前,您需要将所有TextBox.Text值转换为小数。

我的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”的字符串,该字符串无法解析为双精度


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

我觉得问这个问题像个白痴,但“500m”语法是什么?“m”是干什么的?@Sapph:它表示
十进制类型的数值文本。(也就是说,对于double,它相当于
d
,对于float,它相当于
f
)这个平均百分比是一个内置函数,嗯?@saph:你可以做
var x=5m
并将鼠标放在var上以查看它变成的数据类型。@jon Skeet:我的编译器中没有这个Averagepercentage函数!:/问这个问题我觉得自己像个白痴,但“500米”的语法是什么?“m”是干什么的?@Sapph:它表示
十进制类型的数值文本。(也就是说,对于double,它相当于
d
,对于float,它相当于
f
)这个平均百分比是一个内置函数,嗯?@saph:你可以做
var x=5m
并将鼠标放在var上以查看它变成的数据类型。@jon Skeet:我的编译器中没有这个Averagepercentage函数!:/@多米尼克:你的代码片段也不起作用了我猜我的代码有问题…@Dominic你的代码片段也不起作用了…:我想我的代码有问题。。。