为什么计算不正确?

本文关键字:不正确 计算 为什么 | 更新日期: 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)intint除以intint。在整数除法中,21除以16等于1,然后乘以100。你需要移动你的小数点转换,把它放在括号内的一个操作数上;例如:(decimal)x.Sum(i => i.SCORE >= 95 ? 1 : 0)decimal除以int将得到decimal,因此您将重新开始业务。

另一方面,多次执行这些聚合并不是最有效的。