This is topic Значение "-0.0" in forum Общие вопросы / Common questions at Форум TRACE MODE: техническая поддержка.


To visit this topic, use this URL:
http://forum.adastra.ru/ultimatebb.php/ubb/get_topic/f/45/t/000267.html

Posted by Eman1982 (Участник № / Member № 5619) on :
 
Обнаружил забавный баг:
Есть канал float. Привязываю его к ГЭ "Текст" с отображением "%0.1f".

Ввожу канал.In= -0.01
ГЭ "Текст" показывает значение "-0.0".
Согласитесь, несколько странно видеть на экране значение
-0.0 град цельсия.
Как можно исправить эту ситуацию?
 
Posted by KAV (Участник № / Member № 2889) on :
 
а что отрицательных температур не бывает?

если вы хотели отобразить -0.01 то маску введите %0.2f.
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
Не бывает значения -0. Бывает просто 0.
Я хочу, чтобы округляло до 1 знака после запятой, но значения после округления были бы корректными.
Значение -0 или -0.0 или -0.000 корректным быть не может.
 
Posted by Жигалов Денис Николаевич (Участник № / Member № 6035) on :
 
Напишите программную обработку да и все. Которая будет из -0,0 на экране делать 0.
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
Ну, это понятно. Но почему пишет -0? Почему за 10 лет работы в других средах я никогда не видел значения -0? Баг это или не баг? Будут его убирать в следующих версиях, или объяснят, что так и надо, так все и задумано?
 
Posted by Жигалов Денис Николаевич (Участник № / Member № 6035) on :
 
Это не баг. Вы выводите на экран одну цифру после запятой. Вам экран и показывает. Что попросили как говорится то он вам и сделал. Если посмотреть в канал то там будет все в порядке. То есть входное будет -0.01 и реальное -0.01. Вот это не является функцией округления это формат представления данных %0.1f.
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
Денис, когда вас в школе учительница просила округлить -0,01 до целого, вы давали ответ -0?
 
Posted by Жигалов Денис Николаевич (Участник № / Member № 6035) on :
 
Вы не чего не округляете. Вы просто выводите в чистом виде. Если вы хотите видеть округленное. То нужно его с начала округлить. Вы говорите экрану покажи мне одно значение после запятой %0.1f от всего числа которое находится в аргументе канала. Он вам и показывает что вы его попросили.
 
Posted by KAV (Участник № / Member № 2889) on :
 
на самом деле сделайте программную проверку, если ..... = -0,0 то 0.0 ну или в диапазоне контролируйте
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
Реальное значение канала действительно не округляется. Но значение округляется для представления на ГЭ.
Провожу опыт:

канал.In= -0.04
Значение На ГЭ: -0.0

канал.In= -0.05
Значение На ГЭ: -0.1

Как видим, при отображении округляет до ближайшего.

По поводу программной обработки:
Да, можно это сделать так или иначе. Придется что-то такое выдумывать.
Жаль только, что нельзя из прошлого убрать минуту позора, когда при аттестации измерительных каналов на предприятии моя программа выдала значение -0.0 градусов.
 
Posted by KAV (Участник № / Member № 2889) on :
 
с последним согласен
 
Posted by Жигалов Денис Николаевич (Участник № / Member № 6035) on :
 
Чет раньше не додумался так проверить. Тогда видимо действительно баг.
 
Posted by AdAstra Technical Support (Участник № / Member № 4) on :
 
Используется стандартный формат Си вывода чисел. В этом формате отображение всегда наследует знак исходного числа (даже при округлении).
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
Я проверял подобную процедуру на С++. Ничего похожего не происходит. Можете проверить.
 
Posted by Жигалов Денис Николаевич (Участник № / Member № 6035) on :
 
Ну судя из ответа поддержки. процедура языка С++ не использует стандартный формат вывода чисел системы Си. Видимо С++ использует что то другое.
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
Денис, вынужден признать что да, проверка осуществленная мною в BC++ Builder 5 была выполнена не совсем корректно.

Перепроверил я на старом досовском Borland C++ 3.0 вывод на экран:

printf("%.1f",-0.01);

Выводит -0.0

Так что в данном случае здесь грехи Си.
 
Posted by Жигалов Денис Николаевич (Участник № / Member № 6035) on :
 
Как исправить Чет маялся маялся не как не получается. И на ST писал. Не реагирует вообще. Если делать без обработки канала.
Тоесть IN[002] пытаюсь в R[000]. Если IN = таму, дай нам чемы хотим в R
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
В РП Том1, стр. 174 написано, что можно использовать "трансляцию", т.е. вызов каналом программы для преобразования его атрибутов. Но пока у меня тоже не получается.
 
Posted by Жигалов Денис Николаевич (Участник № / Member № 6035) on :
 
Если как не то получится напишите если не сложно. А то у меня тоже давление в -0,0.
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
Денис, у меня получилось решить проблему довольно изящно через трансляцию. Дайте мейл- кину вам.
 
Posted by Жигалов Денис Николаевич (Участник № / Member № 6035) on :
 
xxxxxxx@yyyyyy
Заранее спасибо.

[ 10.06.2013, 08:15: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
 
Posted by Eman1982 (Участник № / Member № 5619) on :
 
отправил
 
Posted by Жигалов Денис Николаевич (Участник № / Member № 6035) on :
 
Спасибо. Получил.
 


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2