在VB.Net中比较单精度和双精度

在VB.Net中比较单精度和双精度,vb.net,Vb.net,以下是我的测试代码: 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 The

以下是我的测试代码:

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
正如你从我的评论中所看到的,前两种说法是错误的,第三种说法是正确的。 为什么呢?精度不重要,因为它是一个很小的数字

这是怎么回事?

是的,精度很重要,尽管它是一个小数字。为什么?因为7.2在二进制表示法中有无限位数:
7.2
(dec)=
111.001100110011…
(bin)——就像10/3=3.333一样。。。用十进制表示法

因此,如果您需要准确地表示非整数,
Single
Double
是错误的选择。您有以下选项:

  • 使用
    Double
    ,但不要比较绝对相等的数字
    a=b
    。相反,检查Abs(a-b)是否小于某个小阈值
  • 使用
    Decimal
    数据类型,该数据类型正是为此目的创建的。简而言之,它存储
    72
    (可以用二进制精确表示)加上小数点右侧有一位数字的信息。因此,这些问题在这里不会发生(至少对于可以用十进制表示法准确表示的数字来说不会发生。10/3在这里仍然是个问题…)

更多信息可以在上找到。

非常好的解释,Heinzi!再见,谢谢。我寻找答案,但不知道问题的真正本质,我没有找到这个,因为我找错了方向。