十进制数类型与.Net中双重类型的准确性

时间:2015-06-28 20:12:33

标签: .net vb.net rounding rounding-error

请考虑以下代码:

    Dim doubleResult = (21 / 88) * 11
    Dim decimalResult = Decimal.Divide(21, 88) * 11

doubleResult是2.625,应该如此。

decimalResult是2.6249999999999996,因此当将此四舍五入到小数点后两位时,结果会不正确。

当我将作业更改为:

    Dim decimalResult = Decimal.Divide(21 * 11, 88) 

结果是2.625!

我们在我们的应用程序中采用了十进制类型,希望它能提高我们的准确性(这是一个得分程序,其中得分最多可以在小数分隔符后面一位数)。但是,似乎十进制类型只是在其他计算上给出了比double类型稍微不正确的结果,因为它基于十个而不是两个基础。

那么,我们如何处理这些特性以避免如上所述的舍入错误?

1 个答案:

答案 0 :(得分:0)

中点舍入的示例

    Dim adec As Decimal = 231D
    adec /= 88D

    adec = Math.Round(adec, 2, MidpointRounding.AwayFromZero)