VB.Net经过一些补充后的双重比较

时间:2015-05-24 14:26:27

标签: vb.net comparison double

在为其添加一些值后,我遇到了一个带有双变量的奇怪情况。 将(0.2)添加到一个双变量不止一次时出现问题 - 我认为它只发生在(0.2) - 例如:考虑这段代码:

Dim i As Double = 2
i = i + 0.2
MsgBox(i) '2.2
MsgBox(i > 2.2) 'False >> No problem

但如果我多次添加(0.2):

Dim i As Double = 2
i = i + 0.2
i = i + 0.2
MsgBox(i) '2.4
Msgbox(i > 2.4) 'True >> !!!!

另外

Dim i As Double = 2
For x As Integer = 1 to 5
    i = i + 0.2
Next
MsgBox(i) '3
Msgbox(i > 3) 'True >> !!!!

我尝试了与其他值相同的代码,我没有遇到这个问题:

Dim i As Double = 2
i = i + 0.5
i = i + 0.5
MsgBox(i) '3
Msgbox(i > 3) 'False >> No problem

有人对此有解释吗? 谢谢

2 个答案:

答案 0 :(得分:1)

如果您采用示例3,您会看到结果实际为AthleteTest

问题在于翻倍。

如果更改数据类型十进制,问题将得到解决:

3.0000000000000009

This is关于C#,但我想,对于vb.net来说也是一样。

答案 1 :(得分:0)

此问题称为“Accuracy Problems (Wikipedia Link)

  

浮点数不能精确地代表所有的事实   实数,浮点运算不能   代表真正的算术运算,导致许多令人惊讶的   的情况即可。这与有限精度有关   计算机通常代表数字。