我正在研究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
,并且内部代码被执行。
我已经阅读了比较浮点数的问题,应该避免使用它,但是上述的替代解决方案是什么?
答案 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
值。