2012-03-08 204 views
0

我在vb.net网站下面一行:linq.sum被四舍五入

totCost = outstandingTimesheet.ClaimLines.Sum(Function(x) x.TotalLineCost And x.Queried = False) 

总和带来圆润,虽然,我不能,为什么工作了......

任何想法?

我不相信它只是格式化输出更是什么总和内正在进行的情况。

这是正确的吗?

+2

'ClaimLines'的类型是什么?什么是实际结果?预期的结果是什么? – 2012-03-08 09:47:44

+0

你总结了一堆布尔 – 2012-03-08 11:28:09

回答

1

你也许混淆WhereSum?我建议:

outstandingTimesheet.ClaimLines.Where(x => !x.Queried).Sum(x => x.TotalLineCost); 

您总结了按位与操作的结果:

outstandingTimesheet.ClaimLines.Sum(x => (x.TotalLineCost & x.Queried)); 

然而,你的结果应该是完全错误的,不只是四舍五入。这就是所有的C#,因为我在VB.NET中会犯严重错误。对不起。

在VB.NET(西蒙):

totCost = outstandingTimesheet.ClaimLines.Where(Function(x) x.Queried = False).Sum(Function(x) x.TotalLineCost) 
+0

,或者也许他只是存储在双一个int ...因此全面上涨 – squelos 2012-03-08 09:51:16

+0

呀,什么类型的@Simon是'totCost'? – 2012-03-08 09:53:41

+0

谢谢你们都是对的。 – Simon 2012-03-08 09:56:21

0

难道是可能的,你是存储散发出来作为一个双,一个int内的结果呢? 这是可能的,如果您还没有激活您的项目属性Option strict。 这会导致您的总和的结果四舍五入。

或者你可以只错在你的LINQ也,如木渎

编辑声明:为了澄清Option strict:如果它不是启用,隐式转换将不进行警告或错误通知来完成的,所以它可以给int一个双精度值,而不会告诉你你正在这样做。

Option strict and option explicit on MSDN

+0

你;重权,我作为一个idotio。 – Simon 2012-03-08 09:56:42

+0

不要忘记选择一个答案,让人们知道你已经找到了解决办法:) – squelos 2012-03-08 09:58:37