在VB.Net中比较单个到双精度

时间:2010-10-19 16:17:38

标签: 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 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

正如您在我的评论中所看到的,前两个陈述是错误的,第三个是真的。 这是为什么?精度应该无关紧要,因为它的数量很少。

这里发生了什么?

1 个答案:

答案 0 :(得分:6)

是的,精确度即使它是一个小数字。为什么?因为7.2具有二进制表示法的无限位数:7.2(dec)= 111.001100110011...(bin) - 就像10/3 = 3.333 ...用十进制表示法。

因此,如果您需要准确表示非整数,SingleDouble是不好的选择。您有以下选择:

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

例如,可以在Wikipedia上找到更多信息。