0

T-SQL プロシージャからデータを取得しています。列の 1 つが数値 (18,2) としてキャストされています。

この手順を実行してデータを Excel にコピーすると、この列の合計は、vb.net でこれを実行したときに得られる合計よりも 0.01 少なくなります。

vb.netでは、列の値を辞書(文字列、10進数)に集約しています

なぜこれが起こっているのかわかりません。

   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

エクセルのセルに。数値が最終的に次のようになることがわかります。

 1234567890123450
于 2013-04-19T11:05:55.533 に答える