0,9 <0,9 верно в vb.net - PullRequest
       2

0,9 <0,9 верно в vb.net

0 голосов
/ 24 августа 2018

Я работаю над проектом 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 голосов
/ 24 августа 2018

Литерал 0.9 не совсем равен 0,9, но вместо этого является ближайшим значением Double, которое составляет 0,90000000000000002220446049250313080847263336181640625.

С другой стороны, ближайшим значением Single является 0,89999997615814208984375, которое составляетменьше значения Double.

0 голосов
/ 24 августа 2018

Кажется, что проблема не возникает, если вы измените переменную с Single на Double. Я думаю, что компилятор превращает 0,9 в двойной. но вы также можете превратить 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...