关于vb.net:WBONG中的双重错误

WRONG SUM OF DOUBLES IN VB .NET

本问题已经有最佳答案,请猛点这里访问。

您好,我使用的是Microsoft VB 2012,有一个双精度求和的问题。

这个简单的代码复制了它:

1
2
3
4
5
Dim result As Double = 0
Dim amount1 As Double = 81.83
Dim amount2 As Double = 50.0
result += amount1
result += amount2

结果等于131.829999998而不是131.83

事实上:

1
2
3
4
Dim test1 As Double = 81.83 + 50.0   '(= 131.82999999998 wrong)
Dim test2 As Double = 81.83 + 50     '(= 131.82999999998 wrong)
Dim test3 As Double = 81.83 + 10     '(=  91.83 OK)
Dim test4 As Double = 81.82 + 50.0   '(=  131.82 OK)

有人能解释一下吗?

最好的问候戴维


双精度值只能精确地表示某些数字。大多数值只能近似。更多详细解释请参见维基百科。基本上,小数位数是固定的,这取决于浮点数的大小(比较单位数和双位数)和表示该数字的指数。因此,即使是简单的计算也可能产生一些舍入误差。

为了避免这种情况,您可以使用像Decimal这样的数据类型,它是精确表示的,并且通常用于财务计算,例如为了避免这些错误。