为什么这个函数总是返回零?
问题描述:
这是函数:为什么这个函数总是返回零?
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);
答
由于运营商/
具有两个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
)。
您应该使用其他类型(小数或浮点数等)。
你能提供一些样品吗?在结果小于0的'int'上使用'/'将始终为0. – 2015-04-03 14:17:42
只需传递任何值即可。 – Branislav 2015-04-03 14:18:57
你知道在这个(kat1 + kat2 * 2)中将首先完成“kat2 * 2”。我会加上括号使其更清楚。 – J*s 2015-04-03 14:21:14