Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Ошибки в компонентах"
Ответов: 2
Рейтинг: 0
#1: 2020-02-29 22:33:28 ЛС | профиль | цитата
У меня такая ситуация, при работе компонента if нужно сравнить ответ выражения с числом 6.2. И этот оператор выдаёт такую картину, если я пишу 1, то он говорит, что 1 меньше 6.2, если я ставлю 7, то он говорит, что 7 больше 6.2. Пока все логично и правильно, но если я ставлю 10 или 100 и тд, то он мне пишет что 10 меньше 6.2. Что делать, как исправить?
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 537
Рейтинг: 14
#2: 2020-02-29 23:11:35 ЛС | профиль | цитата
Много раз на форуме обсуждалось уже, вы сравниваете строки, а нужно сравнивать число

Add(MainForm,2953706,217,147)
{
}
Add(Edit,1386181,322,147)
{
Left=5
Top=5
Text="10"
}
Add(Edit,4179699,434,196)
{
Left=70
Top=5
Text="6.2"
}
Add(Button,15037630,217,294)
{
Left=5
Top=50
link(onClick,13745305:doEvent1,[])
}
Add(If_else,16394790,371,308)
{
Type=2
link(onTrue,11999092:doMessage,[])
link(onFalse,14529871:doMessage,[(415,321)(415,356)])
link(Op1,12638816:GetData,[])
link(Op2,8400053:GetData,[(384,292)(489,292)])
}
Add(Message,11999092,427,308)
{
Message="Верно"
}
Add(Message,14529871,427,350)
{
Message="Не верно"
}
Add(Convertor,9973968,322,196)
{
Mode=1
link(onResult,12638816:doData,[])
link(Data,1386181:Text,[])
}
Add(EventFromData,12638816,371,196)
{
}
Add(Convertor,334837,434,245)
{
Mode=1
link(onResult,8400053:doData,[])
link(Data,4179699:Text,[])
}
Add(EventFromData,8400053,483,245)
{
}
Add(Hub,13745305,280,294)
{
OutCount=3
link(onEvent1,9973968:doConvert,[(308,300)(308,202)])
link(onEvent2,334837:doConvert,[(364,307)(364,251)])
link(onEvent3,16394790:doCompare,[])
}

Как то так
карма: 4

0
Ответов: 2
Рейтинг: 0
#3: 2020-03-01 06:57:29 ЛС | профиль | цитата
Спасибо
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#4: 2020-03-01 09:58:40 ЛС | профиль | цитата
Sersey писал(а):
Много раз на форуме обсуждалось уже
Это правда.
И не раз говорилось, что тип сравнения зависит от типа данных, подаваемых на If_Else.Op1.
И если применяешь EventFromData, то применяй правильно. (Особенно, когда даёшь советы новичкам.)
Как то так

Add(MainForm,13864024,105,126)
{
}
Add(Edit,1386181,161,126)
{
Left=5
Top=5
Text="10"
}
Add(Edit,4179699,266,126)
{
Left=70
Top=5
Text="6.2"
}
Add(Button,15037630,161,245)
{
Left=5
Top=50
link(onClick,16394790:doCompare,[])
}
Add(If_else,16394790,203,245)
{
Type=2
link(onTrue,11999092:doMessage,[])
link(onFalse,14529871:doMessage,[])
link(Op1,12638816:GetData,[])
link(Op2,4179699:Text,[(216,233)(272,233)])
}
Add(Message,11999092,301,245)
{
Message="Верно"
}
Add(Message,14529871,259,252)
{
Message="Не верно"
}
Add(Convertor,9973968,161,189)
{
Mode=1
link(onResult,12638816:doData,[])
link(Data,1386181:Text,[])
}
Add(EventFromData,12638816,203,189)
{
link(onEvent,9973968:doConvert,[(247,195)(247,183)(149,183)(149,195)])
}


Редактировалось 2 раз(а), последний 2020-03-01 10:06:42
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 9906
Рейтинг: 351
#5: 2020-03-01 10:27:36 ЛС | профиль | цитата
И почему это Convertor.Mode=StrToInt, а не StrToReal ....
Вроде бы, с самого начала шла речь о действительных числах.

Не отмечен также более простой вариант: Edit.DataType=FloatNumber.
Как справедливо замечено, достаточно было бы только для одного Edit-а, подключенного к If_Else.Op1.
Как то так

Add(Edit,1386181,252,133)
{
Left=5
Top=5
Text="10"
DataType=4
}
Add(Edit,4179699,315,133)
{
Left=70
Top=5
Text="6.2"
}
Add(Button,15037630,182,203)
{
Left=5
Top=50
link(onClick,16394790:doCompare,[])
}
Add(If_else,16394790,252,203)
{
Type=2
link(onTrue,11999092:doMessage,[])
link(onFalse,14529871:doMessage,[])
link(Op1,1386181:Text,[])
link(Op2,4179699:Text,[(265,191)(321,191)])
}
Add(Message,11999092,357,203)
{
Message="Верно"
}
Add(Message,14529871,315,210)
{
Message="Не верно"
}

Редактировалось 2 раз(а), последний 2020-03-01 11:53:24
карма: 9

0
Главный модератор
Ответов: 2997
Рейтинг: 395
#6: 2020-03-01 17:06:01 ЛС | профиль | цитата
Если пользователь мыслит слева на право, то в большинстве случаев схема будет выглядеть примерно так:


ВОПРОС: почему тогда приведение типов сделано по типу op1? Может быть будет меньше вопросов по элементу If на форуме, если приведение делать по op2.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 16884
Рейтинг: 1239
#7: 2020-03-02 14:42:17 ЛС | профиль | цитата
Nic, в некоторых случаях нарушится совместимость со старыми схемами.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Главный модератор
Ответов: 2997
Рейтинг: 395
#8: 2020-03-02 16:53:52 ЛС | профиль | цитата
Tad, обязательно найдётся схема в которой нарушится совместимость и ради этой гипотетической схемы неизвестного происхождения будем каждый раз объяснять очередному новичку, что всё у нас правильно в элементе If, а он, новичёк то бишь, не знает как правильно числа сравнивать.
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 16884
Рейтинг: 1239
#9: 2020-03-02 20:41:39 ЛС | профиль | цитата
Добавить в свойства "Тип операндов" - String, Integer, Real.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
9
Сообщение
...
Прикрепленные файлы
(файлы не залиты)