vb.net中十进制值的总和不正确

时间:2013-04-19 09:00:28

标签: sql sql-server vb.net decimal

我从T-SQL程序中提取数据,我的一个列被转换为数字(18,2)

当我运行此程序并将数据复制到excel时,此列上的总和比我在vb.net上运行时获得的总和少0.01。

在vb.net中,我将列的值聚合为字典(字符串,十进制)

我不知道为什么会这样。

   If Not dr.IsDBNull(dr.GetOrdinal(f.field)) Then
        Dim dval = If(dr.IsDBNull(dr.GetOrdinal(f.field)), 0D, dr.GetDecimal(dr.GetOrdinal(f.field)))
        di.Add(New FieldValue With {.Type = f, .Value = If(rpt.allow_negatives, dval, Math.Abs(dval))}, rpt.overide_format)
        If rpt.has_total AndAlso f.totaled Then totals(f.field) += dval
    Else
        di.Add(New FieldValue With {.Type = f, .Value = 0D})
    End If

1 个答案:

答案 0 :(得分:2)

Math.Abs​​有一个decimal重载,所以可能不是这样。更有可能是Excel导致计算错误。 Excel通常会丢弃超过15位数的精度。

请参阅:http://en.wikipedia.org/wiki/Numeric_precision_in_Microsoft_Excel

要自己证明这一点,请输入

 1234567890123456.78

进入Excel单元格。你会看到这个数字最终是:

 1234567890123450