我从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
答案 0 :(得分:2)
Math.Abs有一个decimal
重载,所以可能不是这样。更有可能是Excel导致计算错误。 Excel通常会丢弃超过15位数的精度。
请参阅:http://en.wikipedia.org/wiki/Numeric_precision_in_Microsoft_Excel
要自己证明这一点,请输入
1234567890123456.78
进入Excel单元格。你会看到这个数字最终是:
1234567890123450