在为其添加一些值后,我遇到了一个带有双变量的奇怪情况。 将(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
有人对此有解释吗? 谢谢
答案 0 :(得分:1)
如果您采用示例3,您会看到结果实际为AthleteTest
。
问题在于翻倍。
如果更改数据类型十进制,问题将得到解决:
3.0000000000000009
This is关于C#,但我想,对于vb.net来说也是一样。
答案 1 :(得分:0)
此问题称为“Accuracy Problems (Wikipedia Link)”
浮点数不能精确地代表所有的事实 实数,浮点运算不能 代表真正的算术运算,导致许多令人惊讶的 的情况即可。这与有限精度有关 计算机通常代表数字。