我计算要在数据网格中添加的百分比,但是当我报告数据时,它总是返回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);
}
答案 0 :(得分:4)
这可能是由int
的精确度造成的。请改用decimal
或double
。
当我们使用整数时,我们会失去精度。
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
答案 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}}显示)。