在 Linq Query 的最终结果中获取舍入值

Posted

技术标签:

【中文标题】在 Linq Query 的最终结果中获取舍入值【英文标题】:Getting Rounded Values in the final result of Linq Query 【发布时间】:2014-07-21 09:49:05 【问题描述】:

如何修改下面的 linq 查询,以便我可以得到一个四舍五入的数值。

                 var result=GetStudentsWithTheirMarks()                
                .OrderByDescending(x => Math.Round(x.PercentageScore)).Take(5)                 
                .OrderBy(x => x.PercentageScore);

请忽略两个 order by 子句的存在,因为这样做是有目的的。 GetStudentsWithThierMarks 返回学生列表及其名字和百分比分数。 我相信上述查询 Math.Round 仅在按操作排序期间适用,因此最终结果仍包含小数位的值,而我只对具有整数值的四舍五入数字感兴趣。我只是想不通语法。

【问题讨论】:

【参考方案1】:

你只需要一个Select

var result= GetStudentsWithTheirMarks()                
            .OrderByDescending(x => Math.Round(x.PercentageScore))
            .Take(5)                 
            .OrderBy(x => x.PercentageScore)
            .Select(x => Math.Round(x.PercentageScore));

【讨论】:

嗨 Selman22 我知道这就是语法,但是一旦我把它放在我的查询中,我的 order by 子句就有语法问题,请您发布完整的查询。谢谢 什么是错误 抱歉。我的错误是我的方法中有不同的返回类型。所以谢谢你的回答【参考方案2】:

您可以将此值存储在匿名类型中:

var result = GetStudentsWithTheirMarks()    
  .Select(s => new 
   
      Student = s, 
      RoundedPercentageScore = Math.Round(s.PercentageScore) 
  )          
  .OrderByDescending(x => x.RoundedPercentageScore )
  .Take(5)                 
  .OrderBy(x => x.Student.PercentageScore);

现在可以这样访问了:

foreach(var x in result)
    Console.WriteLine("RoundedPercentageScore: " x.RoundedPercentageScore);

【讨论】:

嗨蒂姆感谢您的回复。在第一部分 OrderByDescending 子句会给出语法错误。 @Sike12:你确定你用过我上面贴的代码吗?我没有看到您的语法错误的原因。 道歉。我的错误是我的方法中有不同的返回类型。所以谢谢你的回答

以上是关于在 Linq Query 的最终结果中获取舍入值的主要内容,如果未能解决你的问题,请参考以下文章

将双精度值舍入为 2 位十进制数字 [重复]

在Java中使用double值舍入

即使在 C 中使用“\n%.2f”后,也无法将浮点值舍入到最接近的第二个小数 [关闭]

在java中将双精度值舍入为两位有效数字[重复]

使用 SQLAlchemy 和 MySQL 进行浮点值舍入

舍入值的条件格式