为什么计算不正确?
本文关键字:不正确 计算 为什么 | 更新日期: 2023-09-27 18:08:16
在下面的Linq代码中,计数为16,总和为21,这是正确的。然而,分数总是显示为100。应该是76.19。发生了什么?
另外,我尝试得分= sum/count,但我似乎不能在新部分内使用变量。有什么建议吗?
.GroupBy(g => g.YR_MNTH)
.Select(x =>
new
{
count = x.Count(),
sum = x.Sum(i=>i.SCORE >= 95? 1:0),
score = (decimal)Math.Round((decimal)(x.Sum(i => i.SCORE >= 95 ? 1 : 0) / x.Count()) * 100, 2)
});
对整数进行数学运算得到整数。如果你这样做:
1 / 2
结果将不是是0.5
,而是0
。所以这:
x.Sum(i => i.SCORE >= 95 ? 1 : 0) / x.Count()
将产生一个整数。稍后将该整数转换为小数不会在事后改变其值。在对单个值执行数学运算之前,需要对它们进行强制转换:
(decimal)x.Sum(i => i.SCORE >= 95 ? 1 : 0) / (decimal)x.Count()
问题是x.Count()
是int
, x.Sum(i=>i.SCORE >= 95? 1:0)
是int
。int
除以int
得int
。在整数除法中,21除以16等于1,然后乘以100。你需要移动你的小数点转换,把它放在括号内的一个操作数上;例如:(decimal)x.Sum(i => i.SCORE >= 95 ? 1 : 0)
。decimal
除以int
将得到decimal
,因此您将重新开始业务。
另一方面,多次执行这些聚合并不是最有效的。