数据表上的 Sum 列有 2 个不同的结果

Sum column on datatable with 2 different results

我有一个包含列的数据表:总计
这是数据表:

Totale (datatype: decimal)
2,9 
2,9

我需要对这些列求和,然后我尝试了这段代码:

 Dim Totale As Double = dt.AsEnumerable().Sum(Function(r) IIf(IsDBNull(r("Totale")), 0, r("Totale")))
Dim Totale As Decimal= dt.AsEnumerable().Where(Function(r) IsDBNull(r("Totale")) = False).Sum(Function(r) r("Totale"))
  Dim Totale As Decimal= Convert.ToDecimal(dt.Compute("SUM(Totale)", "Totale is not null"))

这给了我以下结果:

6
6
5,8

只有最后一个是正确的!

为什么前 2 个总和的结果是 6

因为您没有转换 r("Totale"),所以迭代器求和不精确,尝试:

Dim Totale As Decimal= dt.AsEnumerable().Sum(Function(r) IIf(IsDBNull(r("Totale")), 0, Convert.ToDecimal(r("Totale"))))

Sum 似乎将值视为导致四舍五入的整数。您可以尝试使用 CDec.

对值进行类型转换
Dim Totale As Double = dt.AsEnumerable().Sum(Function(r) IIf(IsDBNull(r("Totale")), CDec(0), CDec(r("Totale"))))
Dim Totale As Decimal= dt.AsEnumerable().Where(Function(r) IsDBNull(r("Totale")) = False).Sum(Function(r) CDec(r("Totale")))
Dim Totale As Decimal= Convert.ToDecimal(dt.Compute("SUM(Totale)", "Totale is not null"))