在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
。相反,检查Abs(a-b)是否小于某个小阈值a=b
- 使用
数据类型,该数据类型正是为此目的创建的。简而言之,它存储Decimal
(可以用二进制精确表示)加上小数点右侧有一位数字的信息。因此,这些问题在这里不会发生(至少对于可以用十进制表示法准确表示的数字来说不会发生。10/3在这里仍然是个问题…)72
更多信息可以在上找到。非常好的解释,Heinzi!再见,谢谢。我寻找答案,但不知道问题的真正本质,我没有找到这个,因为我找错了方向。