Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
После длительного отлучения от программирования в данной прекрасной программе (увы, но жизнь вносит свои коррективы в наши увлечения и хобби, но это,пожалуй, не для этой темы), решила тряхнуть стариной и немного "побаловаться". Знания медленно, но уверенно возвращаются. И все вроде б ничего, но столкнулась с непонятным поведением кода, а именно: Имеется код, часть которого привожу
А непонятки происходят при сложении [TotalNew]+[s2] Целые числа складываются нормально, а вот дробные не очень. К примеру, вместо ожидаемого результата 71,2 получается 71,1999999999999872. А что самое интересное, это почему-то в скомпилированном приложении, при запуске из NeoBook все складывается нормально. Может кто подскажет, в чем юмор?
P.S. Все складываемые числа имеют только один знак после запятой, либо же они целые. Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
Сообщение отредактировано Callisto - Пт, 12 Февраля 2021, 16:36
Таки тоже использовала этот вариант, результат аналогичный. Пока, как выход, приходится городить костыли: перед сложение умножать переменную на десять, а уже после цикла конечный вариант делить на десять, тогда результат получается правильный. Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
Таки тоже использовала этот вариант, результат аналогичный.
В приведенном в первом сообщении темы коде имеется 2 переменных которые необходимо сложить. Начальные значения переменных TotalNew и s2 задаются до начала цикла (для TotalNew видим задание значения равное 0, для s2 идет задание значение еще раньше и не показано), затем в каждой позиции цикла производится сложение, TotalNew и s2 с постоянным добавлением значения из переменной s2 к уже имеющемуся значению в TotalNew. Таким образом, если в TotalNew оказывается неправильный результат, то его туда заносит код, который находится за пределами показаного кода в цикле.
Специально проверил сложение в цикле, все работает идеально.
Код
.Присваиваем значение переменной TotalNew SetVar "[TotalNew]" "0" .Присваиваем значение переменной s2 SetVar "[s2]" "20,12345678910" .Присваиваем значение переменной INF01 SetVar "[INF01]" "Начальное значение переменной TotalNew = [TotalNew]" .Присваиваем значение переменной INF02 SetVar "[INF02]" "Начальное значение переменной s2 = [s2]" .Запусукаем цикл Loop "1" "1000" "[i]" .Производим сложение чисел из двух переменных Math "[TotalNew]+[s2]" "1" "[TotalNew]" .Задержка в цикле для уменьшения нагрузки на ЦП Delay "21" EndLoop .Присваиваем значение переменной INF03 SetVar "[INF03]" "Значение переменной TotalNew после сложения в цикле = [TotalNew]"
s2 до начала цикла не существует, она появляется при парсинге строки
Код
StrParse "[Txt.Line[i]]" "[#9]" "[s]" ""
И доподлинно известно, что s2 всегда либо целое число, либо десятичная дробь с одним знаком после запятой, другого быть не может. Если вкратце, то в цикле происходит построчная обработка многострочного текста, имеющего вид: Текст Цифра Цифра Вот сложение первой цифры и происходит. (Пока не с руки привести сам код, т.к. не имею доступа).
Но опять же упомяну, что некорректно сложение происходит только в скомпилированном приложении, при запуске из самого NB все складывается нормально. Мне больше интересен этот вопрос. Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
Сообщение отредактировано Callisto - Ср, 17 Февраля 2021, 12:35
Callisto, попробуй записывать значения цикла в файл (или все значения после каждой операции) и после просмотри эти значения. Чудес не бывает. Это единственный выход отследить происходящее в скомпилированном проекте. Не хочешь читать хелп?
Моей фантазии тут явно не хватает, и фиг его знает из-за чего происходит такая фигня. Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
Сообщение отредактировано Callisto - Ср, 17 Февраля 2021, 16:17
Во первых, без примера ничем помочь не смогу. Где то идет сбой. А где? Нужно искать. Во вторых, не советую записывать в таком виде If "[dbfError]" "=" "Поиск завершен." Лучше If "[dbfError]" "<>" "" Так как не известно как работает плагин в скомпилированном варианте.
Да и вообще к тексту лучше обращаться только в том случае, если ты его сама где то программно отправляешь, иначе после долго можешь ошибку искать.
Собери небольшой пример где будет подобная ошибка и выложи, а мы вместе тогда ее поищем. Иначе...
Или попробуй вести лог всех действий, что бы отследить в какой именно момент начинается сбой. Первые две строки считает правильно, а на третьей спотыкается. Вот и надо найти, что, где и как меняет десятичное значение. Сомневаюсь я, то это при сложении.
Добавлено (19 Февраля 2021, 02:28) --------------------------------------------- Взял твои цифры, написал примерчик
Все работает правильно и в скомпилированном и не в скомпилированном варианте. Это подтверждает, что сложение происходит правильно. А вот почему у тебя изменяется значение переменной, нужно искать.
Добавлено (19 Февраля 2021, 02:31) --------------------------------------------- Тебе нужно не циклиться на сложении, там все правильно, а искать в какой момент меняется значение.
Советом непременно воспользуюсь, многие мелочи, увы, подзабылись.
Цитатаmishem ()
Первые две строки считает правильно, а на третьей спотыкается
Дело не в конкретной строке, ради интереса пробовала в исходном тексте менять порядок и, в зависимости от порядка строк, ошибка появлялась в совершенно другом месте (на другой строке), либо же пропадала вовсе. Чудо чудное, да диво дивное.
В общем, расскажу коротко о проекте... Одна моя давняя подруга работает кладовщиком и как-то сидя в баньке зашла речь о ее работе и она посетовала на некоторые недоработки в 1С, которые им никто не может устранить. Я же, вспомнив о своем старом увлечении, согласилась помочь старой подруге. Не в даваясь в подробности всей их кухне (которые я сама до конца не поняла), от приложения требуется следующее: Скопировать заявку из 1С, отсортировать порядок магазинов в определенном порядке и распечатать новый вариант заявке. И все, в принципе, работает, но вот этот момент все портит.
Ссылка на архив с примером проекта без всего лишнего Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
С теми данными что ты дала, у меня считается все корректно в обоих случаях.
Добавлено (21 Февраля 2021, 09:21) ---------------------------------------------
ЦитатаCallisto ()
Дело не в конкретной строке
Совершенно верно, я тебе просто указал на то, что счет начинается правильно, а в каком то месте меняется значение, из которого вычитаются какие то сотые.
Здесь вариантов может быть множество. От региональных настроек на компьютере, до не правильно написанного кода.
Перед тем, как скидывать сюда, я неоднократно проверила работу кода и у меня происходит ошибка.
А ошибка вылазит не только на моем компьютере, на двух других машинах, причем с разными ОС (ХР и W7), происходит тоже самое.
Сейчас вот подумалось, что все дело может быть в нелицензионной версии NB. Так и не успела приобрести себе лицензию. Сначала откладывала, с мыслями, что еще усею, потом как-то отошла от программирования из-за нехватки времени.
P.S. Можешь скинуть скомпилированный файл для проверки? Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
Сообщение отредактировано Callisto - Вс, 21 Февраля 2021, 10:48
Сейчас вот подумалось, что все дело может быть в нелицензионной версии NB.
Вряд ли. Вот если ломанная, то возможно.
ЦитатаCallisto ()
Можешь скинуть скомпилированный файл
Ссылка Я там свой вариант набросал, с которым не должно быть ошибок и возможно натолкнет тебя на какие нибудь мысли. Плагин нужен hpwControl
Добавлено (21 Февраля 2021, 13:49) ---------------------------------------------
ЦитатаCallisto ()
Перед тем, как скидывать сюда, я неоднократно проверила работу кода и у меня происходит ошибка.
Ну раз 10 я точно потыкал. Все верно считает.
Добавлено (21 Февраля 2021, 13:52) ---------------------------------------------
ЦитатаCallisto ()
Так и не успела приобрести себе лицензию.
У тебя еще не все потеряно. Можешь на офсайте приобрести, или с Вадимом поговорить.
Добавлено (21 Февраля 2021, 13:56) --------------------------------------------- И да, регулярки я методом тыка пишу, по этому они оставляют желать лучшего. Если что то серьезное делать, то над ними надо работать тщательно.
Скачав последнюю версию с офсайта (ныне VisualNeo Win), скомпилировала там свое приложение. Ошибка пропала Отсель мораль, не пользуйтесь пиратским софтом.
По поводу приложения... Почему-то стандартный антивирус десятки сходит с ума
А еще, почему-то оду строку твой код складывает два раза.
Цитатаmishem ()
Я так понимаю тебе нужно упорядочить по ид
Нет ID использую для, так сказать, ассоциации БД и .ini-файла, а нужный порядок как раз и реализован в .ini-файле. Но я уже хочу все переделать и отказаться от .ini-файла и html-файла и реализовать все через базу данных. Html использовала для более гибкого оформления таблицы при печати, но как выяснилось, в напечатанном виде все мои выделения практически не видны, поэтому решила печать реализовать сразу через плагин базы данных.
А вообще, узнала, что еще появилась VisualNEO Web и хочу покопаться в этом направлении, т.к. в моем случае есть один большой плюс - доступ и редактирование приложения откуда угодно, не надо ни флешек, ни файлообменников. Правда уже столкнулась с некоторыми трудностями Не планируется ли на форуме создать ветку по VisualNEO Web? Пожалуйста, не надо ко мне на "Вы", а то чувствую себя бабулькой)
Сообщение отредактировано Callisto - Вс, 21 Февраля 2021, 20:56
Почему-то стандартный антивирус десятки сходит с ума
На оффоруме где то уже была по поводу этого тема. Самый оптимальный вариант решения этого вопроса (как мне помнится), это изменить разрешение файлов плагинов на .dll (правда усложняется установка плагинов) и при компиляции проекта не шифровать его.
ЦитатаCallisto ()
А еще, почему-то оду строку твой код складывает два раза.
Возможно где то, что то упустил. Накидал первое, что пришло в голову. Если его "пошлифовать", то думаю все в порядке будет.
ЦитатаCallisto ()
и реализовать все через базу данных.
Только лучше использовать про версию плагина. Больше возможностей. На много больше. Кстати на него сейчас цена по моему тоже чисто символическая.
ЦитатаCallisto ()
появилась VisualNEO Web
Давно уже появилась и активно обновляется, в отличие от вин. Вин похоже вообще забросили, не по зубам.
ЦитатаCallisto ()
Не планируется ли на форуме создать ветку по VisualNEO Web
Ну по сравнению с предыдущей, если мне память не изменяет, что то в районе 99 или 129...
ЦитатаCallisto ()
Что-то не смогла найти.
Это начало, а вторая тема по моему называется Закат или второе дыхание, но с наскока не смог найти. Но там больше о судьбе необук. Не хочешь читать хелп?
novichok, вопрос решился, проблема была в ломанной версии и она не правильно считала. Петр не однократно говорил, что ломанная версия может "выстрелить" в любой момент и этот выстрел не возможно предугадать. Не хочешь читать хелп?