Кто программировал в Codesys ? |
Ответить |
Автор | ||
Участник Присоединился: 13 Апрель 2004 Online Status: Offline Публикации: 58 |
Опубликовано: 24 Август 2005 21:49 |
|
Здравствуйте, вот такая проблема:
a:Real; a:=4-3.9; 1. Результат = 9.99999-e002 почему не 0.1? Результат нужно вывести на панель индикации Поэтому Real_TO_String(a) и на панели отображается 9.99999-e002, а хотелось бы 0.1 |
||
Действительный член Присоединился: 15 Март 2004 Категория: Russian Federation Online Status: Offline Публикации: 112 |
||
Попробуйте LREAL
Удачи |
||
Vladimir Voronenkov
"Первая Миля", Authorized ICONICS Systems Integrator |
||
Действительный член Присоединился: 24 Декабрь 2004 Online Status: Offline Публикации: 321 |
||
LREAL - это то же самое действительное представление числа только длинное, оно занимает 64бита, а REAL 32, ну вот я только что проделал в Кодесисе эту операцию в режиме эмуляции - все показывает как надо, как Вы хотите PROGRAM PLC_PRG (*вычисления*) a:= 4 - 3.9; в режиме Login, потом RUN, пошагово Step Over, результаты показывает в правом окошке: a=0.1 d=1 b=0.5 c=-0.8 а как Вы пытаетесь выводить и на какое табло (или программу)?, может у Вас просто не настроено это окно на формат Реал? |
||
Действительный член Присоединился: 15 Март 2004 Категория: Russian Federation Online Status: Offline Публикации: 112 |
||
По разному бывает
|
||
Vladimir Voronenkov
"Первая Миля", Authorized ICONICS Systems Integrator |
||
Действительный член Присоединился: 24 Декабрь 2004 Online Status: Offline Публикации: 321 |
||
ну тык Вы и поясните при каких условиях получилось то что на первой картинке, а при каких то что на второй...
|
||
Профили участников
Послать частное письмо
Поиск публикаций участников
Посетить домашнюю страницу участника
Добавить в список приятелей
Действительный член Присоединился: 14 Май 2003 Online Status: Offline Публикации: 770 |
||
Это просто. Число 0.1 непредставимо в виде конечной двоичной дроби, девятки появились из-за округления (как это ни странно для нас, привыкших к десятичной системе ). Интересно, что такой эффект наблюдается на платформах ARM и C16x, а при компиляции для 80386 это число отображается как 0.1. Видимо, арифметика там реализована более грамотно, и значения округляются в нужную сторону.
Попробуйте воспользоваться старым трюком: a := REAL_TO_INT (a * 10.0) / 10.0; Функция REAL_TO_INT округляет вещественное число до ближайшего целого. |
||
Инженер-системотехник
+7 (916) 477 3925 |
||
Участник Присоединился: 13 Апрель 2004 Online Status: Offline Публикации: 58 |
||
Спасибо, можно конечно действовать и так, но вот новая проблема: Real_To_String(0.1)='1.0e-1'
|
||
Действительный член Присоединился: 24 Декабрь 2004 Online Status: Offline Публикации: 321 |
||
ну блин у меня тоже самое но как надо показывает =0.1 а Вы все сделали как советовал Максим Ананских ? |
||
Действительный член Присоединился: 29 Январь 2004 Категория: Russian Federation Online Status: Offline Публикации: 293 |
||
МЭК функции преобразования в строки не имеют возможности форматирования. Желаемый вид числа можно сформировать уже в строке. Расширенный вариант, идеи описанной Максимом: VAR iA1 := TRUNC(rA); (*вырезаем отдельно целую часть*) Результат, всегда строка ‘0.1’, при значении rA равном 0.1 или 9.99999E-2;
|
||
Igor Petrov
|
||
Ответить |
Переход на форум | Права доступа на форуме Вы не можете публиковать новые темы в этом форуме Вы не можете отвечать на сообщения в этом форуме Вы не можете удалять Ваши сообщения на этом форуме Вы не можете редактировать Ваши сообщения на этом форуме Вы не можете создавать голосования на этом форуме Вы не можете выражать своё мнение в голосованиях на этом форуме |