0

我正在从 T-SQL 过程中提取数据,我的一列被转换为 numeric(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
4

1 回答 1

2

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

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

要向自己证明这一点,请键入

 1234567890123456.78

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

 1234567890123450
于 2013-04-19T11:05:55.533 回答