vb.net中0.9 <0.9为True

时间:2018-08-24 12:08:22

标签: vb.net floating-point

我正在研究VB.Net项目。在解决方案的某个位置,我具有以下部分代码:

Dim my_variable As Single = 1

'other code goes here

If do_some_tests_here Then
   my_variable = 0.9
End If

If my_variable < 0.9 Then
   'do some other stuff here
End If

我意识到,当my_variable进入第一个If并将其值更改为0.9时,第二个条件my_variable < 0.9返回True,并且内部代码被执行。

我已经阅读了比较浮点数的问题,应该避免使用它,但是上述的替代解决方案是什么?

2 个答案:

答案 0 :(得分:7)

如果将变量从“单”更改为“双”,似乎不会出现此问题。我认为编译器会将0.9本身变成了double。但您也可以使用以下方法将0.9变成一个:

If my_variable < CSng(0.9) Then

或者您可以使用字母F告诉编译器它是单个的  (https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/data-types/type-characters

If my_variable < 0.9F Then

答案 1 :(得分:2)

文字0.9并非精确地为0.9,而是最接近的Double值,即 0.90000000000000002220446049250313080847263336181640625。

另一方面,最接近的Single值是 0.89999997615814208984375,该值小于Double值。