这是我的测试代码:
Dim testSingle As Single = 7.2
Dim testSingleF As Single = 7.2F
Dim testDouble As Double = 7.2
If testSingle = testDouble Then ' this is false
Label1.Text = "true"
Else
Label1.Text = "false"
End If
If testSingleF = testDouble Then ' this is false
Label2.Text = "true"
Else
Label2.Text = "false"
End If
If testSingle = 7.2F Then ' this is true
Label3.Text = "true"
Else
Label3.Text = "false"
End If
Run Code Online (Sandbox Code Playgroud)
正如您在我的评论中所看到的,前两个陈述是错误的,第三个是真的.这是为什么?精度应该无关紧要,因为它的数量很少.
这里发生了什么?
是的,精确度很重要,即使数量很少.为什么?因为7.2具有二进制表示法的无限位数:7.2(dec)= 111.001100110011...(bin) - 就像10/3 = 3.333 ...十进制表示法.
因此,Single和Double是错误的选择,如果你需要精确地表示非整数.您有以下选择:
Double,但永远不要比较绝对平等的数字a = b.相反,检查是否Abs(a-b)小于某个小阈值.Decimal专门为此目的创建的数据类型.简而言之,它存储72(可以用二进制表示),加上小数点右边有一位数的信息.因此,这里不会出现这些问题(至少不能用十进制表示法准确表示的数字.10/3仍然是一个问题......)例如,可以在维基百科上找到更多信息.