数据表上的 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"))
我有一个包含列的数据表:总计
这是数据表:
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"))