Math.Round() - LINQ Query

本文关键字:LINQ Query Round Math | 更新日期: 2023-09-27 18:04:34

我正在运行一个LINQ查询,该查询使用本地"let"变量来计算本地值,以便与传递到查询中的参数进行比较。

我有以下查询:

Items = from lead in Items
        let total = lead.NurtureActions.Count(q => !q.Deleted)
        let completed = lead.NurtureActions.Count(nurtureAction => nurtureAction.Completed && !nurtureAction.Deleted)
        let percentage = Math.Round((Double)((completed/total)*100),0,MidpointRounding.ToEven)
        where 
            total>0 && 
            percentage == progress
        select lead;

上面真正重要的部分是下面这行:

let percentage = Math.Round((Double)((completed/total)*100),0,MidpointRounding.ToEven)

正如您在我的查询中看到的,我正在将该查询的结果与传递到我的函数的progress进行比较。

例如:我可能传入值8,因此progress将具有值8。但是计算出的percentage最初可能是8.223,但我需要将其四舍五入到8

我相信我做的是正确的,但由于某种原因,有些东西没有正确工作。

你知道是什么导致了四舍五入吗?我还尝试了AwayFromZero四舍五入选项,但这也不起作用。

编辑对于那些要求更多信息的人,我不确定它计算的值是多少。我没有调试LINQ查询的经验,也不知道从哪里开始找出这个值是什么。如果我知道如何获得它,我会提供它。

Math.Round() - LINQ Query

随机猜测:totalcompletedint s,因此(completed/total)的结果是截断的值。将截断的值乘以100,然后将转换为double

我猜这在某些情况下会产生意想不到的结果,如果你期望(completed/total)返回double

修复:

let total = (double)lead.NurtureActions.Count(...)
let completed = (double)lead.NurtureActions.Count(...)
let percentage = Math.Round((completed/total)*100, ...)