Math.Round() - LINQ查询

时间:2011-08-05 20:32:33

标签: c# .net linq math

我正在运行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查询的经验,也不知道从哪里开始查找该值是什么。如果我知道如何获得它,我会提供它。

1 个答案:

答案 0 :(得分:7)

随机猜测: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, ...)