这是我的测试代码:
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
正如您在我的评论中所看到的,前两个陈述是错误的,第三个是真的。 这是为什么?精度应该无关紧要,因为它的数量很少。
这里发生了什么?
答案 0 :(得分:6)
是的,精确度即使它是一个小数字。为什么?因为7.2具有二进制表示法的无限位数:7.2
(dec)= 111.001100110011...
(bin) - 就像10/3 = 3.333 ...用十进制表示法。
因此,如果您需要准确表示非整数,Single
和Double
是不好的选择。您有以下选择:
Double
,但绝不会比较绝对平等a = b
的数字。相反,请检查Abs(a-b)
是否小于某个小阈值。Decimal
数据类型。简而言之,它存储72
(可以用二进制表示),加上小数点右边有一位数的信息。因此,这里不会出现这些问题(至少不能用十进制表示法准确表示的数字.10 / 3仍然是一个问题......)例如,可以在Wikipedia上找到更多信息。