Страницы: 1
RSS
IF условие без boolean
 
Наткнулся в легаси коде на условие с double, а не с boolean. Сначала я подумал, что это тоже самое, что и «не равно ноль». Но это не так, т.к. результат не совпадает.

Все нижеприведенные переменные - double. (Извините за форматирование, пишу с мобильника).
Код
If a<>0 And b<>0 And c-d And f<>0 Then
...
End If

Если я меняю «c-d» на «c-d<>0», то результат меняется. «c-d» - это же double, каким образом оно конвертится в boolean? Как тоже самое можно написать «нормальным» языком.
После долгого копания я понял, что «c-d» шире чем «c-d<>0». Т.е. если писать нормально, то надо ещё какое-то условие к «c-d<>0» добавлять.

Заранее спасибо за помощь.
 
а может c-d в скобки надо брать...

P.S. А что из этого Double, а что Boolean? Где объявление переменных?
Изменено: New - 07.04.2021 17:45:34
 
Ещё раз - там все переменные - double. Скобки не помогают.
Изменено: alexkos - 07.04.2021 17:48:02
 
Цитата
alexkos написал:
если писать нормально
то нужно учитывать приоритет операторов.
 
арифметические операции приоритетнее логических будет c-d в скобках или без них - это не повлияет на результат вычисления этого выражения
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Написал цикл с шагом 0.1.
Оказалось, что «c-d» - это тоже самое, что ТА-ДАМ «c-d>=0.5 And c-d<=-0.5». Почему 0.5, а не ноль, как у всех нормальных людей, не знаю.

Тему можно закрывать.
 
Вопрос то в чем? Если совпадет с тем что результат разницы будет -1 то будет true , а все остальное false.
По вопросам из тем форума, личку не читаю.
 
Вопрос в том как написать if statement explicitly.
Если разница -0.5, то True.
Если 0.5, то тоже True.

А вот все, что между - False. Видимо, compiler округляет double. И если результат округления - ноль, то - false.

Просто какой-то умник вместо >=0.5 и <=-0.5 просто ничего не написал.
 
просто кто-то получил в руки сложный инструмент не умеет им пользоваться и не хочет разбираться как им пользоваться
и виноватым в этом оказывается все вокруг, но только не собственное неумение и нежелание
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Просто я перегоняю старый проект написанный на VB6  в C#.
В «отсталом» C# нет такого прикола как автоматическая конвертация double в boolean. Поэтому просто написать «c-d» там не проканает. А если написать «c-d!=0», то результат другой. Вот и приходится «разбираться».

А в чем собственно ваша претензия? Я же разобрался, не вы.

Сорри, за открытие темы. Думал, получу ответ.
 
Цитата
alexkos написал:
Если разница -0.5, то True
так и написать
разница = -0.5 or разница = 0.5
но лучше  ABS(разница) = 0.5
просто вопрос темы не соответствует описанию. If исходно принимает решение на базе boolen и третьего не дано. А вот как результат выражения становится истиной или ложью - это другой вопрос.

Ну для понимания, все что не равно -1, а именно так кодируется True , будет False. Можете проверить
0.1-1.1=true - выдаст True
Изменено: БМВ - 07.04.2021 19:53:48
По вопросам из тем форума, личку не читаю.
 
БМВ, я вообще не понимаю, что вы несёте. Видимо, не дорос.

c-d=-5 - True
c-d=-0.5 - True
c-d=-0.49999 - False
c-d=-0.1 - False
c-d= 0 - False
c-d=0.4999 - False
c-d=0.5 - True
c-d=2 - True

Так понятней?
 
Цитата
alexkos написал:
Так понятней?
Конечно понятнее. Я понял, что гонора много, а помощь не нужна. а судя по
Цитата
alexkos написал:
Я же разобрался, не вы.
уже разобрались. Успехов.
По вопросам из тем форума, личку не читаю.
 
alexkos, прекратите писать через строку.
 
Цитата
alexkos написал:
БМВ, я вообще не понимаю, что вы несёте
alexkos, а повежливее нельзя?
 
Автору надо вот сюда https://www.cyberforum.ru/csharp-beginners/
 
Как в C# пишутся if statements, я знаю.

C# компилятор такой фигни как использование double вместо boolean не пропустит.

А в VBA - да пжлста.

Мы тут не C# обсуждаем.

Еще раз. Два if statements внизу абсолютно одинаковы с точки VBA. А вот первое - в C# не проканает.

If c-d Then
...
End If

If c-d>=0.5 Or c-d<=-0.5 Then
...
End If
 
Цитата
Юрий М написал:  alexkos , прекратите писать через строку.
Вернитесь, приведите в порядок сообщение
 
alexkos, я Вас просил не писать через строку. Зачем жмёте на Enter По два раза? Читабельность лучше не становится.
 
Цитата
alexkos написал:
Еще раз. Два
именно еще Два. Нет никаких подозрений, что от того, какие значения C и D, немного зависит результат?
По вопросам из тем форума, личку не читаю.
 
Извините. Я пишу с мобильника. Под рукой нет русской клавиатуры.
 
? Как наличие лишних пустых строк зависит от раскладки?
 
Трудно исправить, что уже написал.
Страницы: 1
Наверх