为什么计算不起作用?

时间:2015-08-17 16:54:50

标签: c# linq

在下面的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)
            });

2 个答案:

答案 0 :(得分:1)

问题在于queryx.Count()intx.Sum(i=>i.SCORE >= 95? 1:0)int除以intint。 21除以16的整数除法是1然后乘以100.你需要移动你的十进制数并将它放在括号内的一个操作数上;像这样,例如:int(decimal)x.Sum(i => i.SCORE >= 95 ? 1 : 0)除以decimal将导致int,因此您将重新开始营业。

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

答案 1 :(得分:1)

对整数执行数学运算会产生整数。所以如果你做这样的事情:

def data(self, index, role):
    if not index.isValid() or role != QtCore.Qt.DisplayRole: return

结果将1 / 2 ,它只是0.5。所以这个:

0

将导致整数。稍后将该整数转换为小数将不会在事后更改其值。您需要在对它们执行数学运算之前转换各个值:

x.Sum(i => i.SCORE >= 95 ? 1 : 0) / x.Count()