百分比计算总是返回0

时间:2018-02-23 23:36:56

标签: c#

我计算要在数据网格中添加的百分比,但是当我报告数据时,它总是返回0,我做错了什么?

如果我有以下情况:变量quantidadeInstalada的值为10,目标为20,则concluido必须返回50但它返回0

 private void AdicionarPessoa()
 {
     string Valida = ValidaPessoa();
     if (Valida.Equals(""))
     {
         double concluido=0, falta=0;
         int quantidadeInstalada = Convert.ToInt32(ttbQuantidade.Text);
         int meta = Convert.ToInt32(ttbMetaPessoa.Text);

         concluido = (quantidadeInstalada/meta)*100;
         falta = 100-concluido;

         MessageBox.Show(concluido.Text);
     }
     else
         MessageBox.Show(Valida);
 }

3 个答案:

答案 0 :(得分:4)

这可能是由int的精确度造成的。请改用decimaldouble

当我们使用整数时,我们会失去精度。

Console.WriteLine(100 / 17); // 5
Console.WriteLine(100 / 17m); // 5.8823529411764705882352941176     
Console.WriteLine(100 / 17d); // 5.88235294117647
Console.WriteLine(100 / 17f); // 5.882353

由于整数总是向下舍入,0.99整数为0

请注意,对于精度,输入类型很重要。

double output = input1 * input2;

例如:

double outputA = 9 / 10;
Console.WriteLine(outputA); // 0

double outputB = 9 / 10d;
Console.WriteLine(outputB); // 0.9

double outputC = 9d / 10;
Console.WriteLine(outputC); // 0.9

Here is a Fiddle.

答案 1 :(得分:4)

这是因为你正在进行整数除法。您可以通过将其中一个变量转换为concluido = ((double)quantidadeInstalada/meta)*100; 来解决此问题:

auto my_const_expression_lambda = []()
  constexpr -> bool
{
   return true ;
}

答案 2 :(得分:2)

当你用int分割int时(如“quantidadeInstalada / meta”),你将获得一个int。从最开始使用小数类型(例如十进制,双精度),如Shaun建议,或者(如果必须保留整数类型),将值转换为除法表达式中的小数类型(如{{ 3}}显示)。