Страница 243 из 360 ПерваяПервая ... 143193233241242243244245253293343 ... ПоследняяПоследняя
Показано с 2,421 по 2,430 из 3594

Тема: разные вопросы новичка

  1. #2421
    Пользователь
    Регистрация
    27.05.2022
    Адрес
    г.Орёл
    Сообщений
    9

    По умолчанию

    После деления 30 на 1,2 получается целое число 25. Также как если 300 поделить на 1,2 получается 250, а не 249 как в макросе.

  2. #2422
    Пользователь
    Регистрация
    27.05.2022
    Адрес
    г.Орёл
    Сообщений
    9

    По умолчанию

    Так получится, но какие значения будут на выходе при изменениях переменной на входе?
    Да и преобразовать вещественное 250 в целое и получить 249 на выходе это нелогично - вот в чем вопрос.

  3. #2423
    Пользователь
    Регистрация
    27.05.2022
    Адрес
    г.Орёл
    Сообщений
    9

    По умолчанию

    25/1,2=20,8 должно быть 20, а с +0,5 получится 21

  4. #2424

    По умолчанию

    Цитата Сообщение от Mihali4 Посмотреть сообщение
    Здравствуйте! Простейший пример. Почему после преобразования в целочисленное значение результат меньше на 1?Вложение 62063
    Занятный баг

  5. #2425

    По умолчанию

    А в железе такой-же результат?

  6. #2426
    Пользователь
    Регистрация
    27.05.2022
    Адрес
    г.Орёл
    Сообщений
    9

    По умолчанию

    Последовал Вашему совету, прибавил 0,001

  7. #2427
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Цитата Сообщение от Mihali4 Посмотреть сообщение
    Последовал Вашему совету, прибавил 0,001
    я не советовал прибавлять 0.001
    я предлагаю один из вариантов округления называющийся Округление до указанного кратного (https://alphapedia.ru/w/Rounding 3.1 Округление до указанного кратного)
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  8. #2428

    По умолчанию

    Судя по всему, результат деления имеет вид 24.999999, хотя и отображается в отладке как 25. Ну а блок преобразования к udint не округляет, а просто отбрасывает дробную часть.
    Где-то на форуме выкладывали макрос округления к ближайшему целому, похоже нужно в таких случаях перед блоком преобразования использовать что-то подобное.
    Округление с нужным количеством знаков:
    Код:
    function fRound : real;
        var_input
            rIn   : real;
            N     : udint;
        end_var
        
        var
            tmp : udint;
        end_var
        
        
        tmp := 10;
        if N.0 then fRound := udint_to_real(tmp); else fRound := 1; end_if;
        N := SHR(N,1);
        while N > 0 do
           tmp := tmp * tmp;
           if N.0 then fRound := fRound * udint_to_real(tmp); end_if;
           N := SHR(N,1);
        end_while;
        
        rIn := rIn * fRound;
        fRound := (( rIn / abs(rIn) ) * udint_to_real(real_to_udint((abs(rIn) + 0.5)))) / fRound;
        
    end_function
    Последний раз редактировалось 1exan; 10.08.2022 в 06:55.

  9. #2429

    По умолчанию

    Цитата Сообщение от 1exan Посмотреть сообщение
    Судя по всему, результат деления имеет вид 24.999999, хотя и отображается в отладке как 25. Ну а блок преобразования к udint не округляет, а просто отбрасывает дробную часть.
    Где-то на форуме выкладывали макрос округления к ближайшему целому, похоже нужно в таких случаях перед блоком преобразования использовать что-то подобное.
    Округление с нужным количеством знаков:
    Ага, забил на вход 0.71 и получил на выходе 0.8. Офигенно просто))). 1 CDS2_3.jpg
    Var1:=real_to_udint(rin * 10)/10.0 ; куда проще написать
    Последний раз редактировалось kondor3000; 10.08.2022 в 09:25.

  10. #2430

    По умолчанию

    Цитата Сообщение от kondor3000 Посмотреть сообщение
    Ага, забил на вход 0.71 и получил на выходе 0.8. Офигенно просто))).
    Var1:=real_to_udint(rin * 10)/10.0 ; куда проще написать
    Проверил - у меня все правильно:
    изображение_2022-08-10_131413706.png
    А что дает "Var1:=real_to_udint(rin * 10)/10.0 ?

Страница 243 из 360 ПерваяПервая ... 143193233241242243244245253293343 ... ПоследняяПоследняя

Похожие темы

  1. Вопросы новичка!!!
    от sau в разделе ПЛК1хх
    Ответов: 42
    Последнее сообщение: 02.05.2022, 19:57
  2. Вопросы новичка по MasterScada
    от MrNobody в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 04.09.2014, 15:39
  3. ПЛК 110 - Вопросы новичка?
    от di-s в разделе ПЛК1хх
    Ответов: 10
    Последнее сообщение: 06.09.2011, 15:12
  4. Вопросы полного новичка
    от Korion в разделе ПЛК1хх
    Ответов: 11
    Последнее сообщение: 09.02.2010, 10:08
  5. Вопросы новичка по ПЛК
    от Ollegator в разделе ПЛК1хх
    Ответов: 4
    Последнее сообщение: 07.07.2009, 10:29

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •