gpt4 book ai didi

vb.net - 在 VB.Net 中比较 Single 和 Double

转载 作者:行者123 更新时间:2023-12-02 08:57:16 26 4
gpt4 key购买 nike

这是我的测试代码:

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...以十进制表示。

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

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

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

关于vb.net - 在 VB.Net 中比较 Single 和 Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3970412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com