为什么这个函数总是返回零?

为什么这个函数总是返回零?

问题描述:

这是函数:为什么这个函数总是返回零?

private decimal? CalculateMe(int? kat0, int? kat1, int? kat2, int? numberOfPlants) 
{ 
    if (numberOfPlants == null || numberOfPlants == 0 || kat0 == null || kat1 == null || kat2 == null) 
     return null; 

    return ((kat1 + kat2 * 2)/(numberOfPlants * 2)) * 100; 
} 

此函数总是返回零!即使明确演员表被写入Convert.ToDecimal,该函数也会返回零。

return Convert.ToDecimal(((kat1 + kat2 * 2)/(numberOfPlants * 2)) * 100); 
+0

你能提供一些样品吗?在结果小于0的'int'上使用'/'将始终为0. – 2015-04-03 14:17:42

+0

只需传递任何值即可。 – Branislav 2015-04-03 14:18:57

+0

你知道在这个(kat1 + kat2 * 2)中将首先完成“kat2 * 2”。我会加上括号使其更清楚。 – J*s 2015-04-03 14:21:14

由于运营商/具有两个int S作为操作数始终执行integer division

如果要执行真正的除法,则需要将操作数转换为非整数数值类型(float,double,decimal)。换句话说,您必须在之间执行之间的转换,而不是之后的转换。

你需要转换每个操作数来得到那个工作,即:

return ((decimal)(kat1 + kat2 * 2)/(decimal)(numberOfPlants * 2)) * 100; 
+0

不,你不知道。您只需将其中一个变量转换为* decimal *,* float *或* double *。其余的将被隐式地施放。 – 2015-04-03 14:20:09

您整数操作。 例如:1/3 = 0(如果1和3是int)。

您应该使用其他类型(小数或浮点数等)。