Eman1982
Forum Member / Участник форума
Участник № / Member № 5619
отправлено / posted
Обнаружил забавный баг: Есть канал float. Привязываю его к ГЭ "Текст" с отображением "%0.1f".
Ввожу канал.In= -0.01 ГЭ "Текст" показывает значение "-0.0". Согласитесь, несколько странно видеть на экране значение -0.0 град цельсия. Как можно исправить эту ситуацию?
Сообщения / Posts 45 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
KAV
Forum Haunter / Завсегдатай форума
Участник № / Member № 2889
отправлено / posted
а что отрицательных температур не бывает?
Eman1982
Forum Member / Участник форума
Участник № / Member № 5619
отправлено / posted
Не бывает значения -0. Бывает просто 0. Я хочу, чтобы округляло до 1 знака после запятой, но значения после округления были бы корректными. Значение -0 или -0.0 или -0.000 корректным быть не может.
Сообщения / Posts 45 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
отправлено / posted
Напишите программную обработку да и все. Которая будет из -0,0 на экране делать 0.
Сообщения / Posts 112 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Eman1982
Forum Member / Участник форума
Участник № / Member № 5619
отправлено / posted
Ну, это понятно. Но почему пишет -0? Почему за 10 лет работы в других средах я никогда не видел значения -0? Баг это или не баг? Будут его убирать в следующих версиях, или объяснят, что так и надо, так все и задумано?
Сообщения / Posts 45 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
отправлено / posted
Это не баг. Вы выводите на экран одну цифру после запятой. Вам экран и показывает. Что попросили как говорится то он вам и сделал. Если посмотреть в канал то там будет все в порядке. То есть входное будет -0.01 и реальное -0.01. Вот это не является функцией округления это формат представления данных %0.1f.
Сообщения / Posts 112 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Eman1982
Forum Member / Участник форума
Участник № / Member № 5619
отправлено / posted
Денис, когда вас в школе учительница просила округлить -0,01 до целого, вы давали ответ -0?
Сообщения / Posts 45 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
отправлено / posted
Вы не чего не округляете. Вы просто выводите в чистом виде. Если вы хотите видеть округленное. То нужно его с начала округлить. Вы говорите экрану покажи мне одно значение после запятой %0.1f от всего числа которое находится в аргументе канала. Он вам и показывает что вы его попросили.
Сообщения / Posts 112 | Из / From: Россия
| IP / IP: IP адрес / IP address |
KAV
Forum Haunter / Завсегдатай форума
Участник № / Member № 2889
отправлено / posted
на самом деле сделайте программную проверку, если ..... = -0,0 то 0.0 ну или в диапазоне контролируйте
Сообщения / Posts 126 | Из / From: Россия РТ
| IP / IP: IP адрес / IP address |
Eman1982
Forum Member / Участник форума
Участник № / Member № 5619
отправлено / posted
Реальное значение канала действительно не округляется. Но значение округляется для представления на ГЭ. Провожу опыт:
канал.In= -0.04 Значение На ГЭ: -0.0
канал.In= -0.05 Значение На ГЭ: -0.1
Как видим, при отображении округляет до ближайшего.
По поводу программной обработки: Да, можно это сделать так или иначе. Придется что-то такое выдумывать. Жаль только, что нельзя из прошлого убрать минуту позора, когда при аттестации измерительных каналов на предприятии моя программа выдала значение -0.0 градусов.
Сообщения / Posts 45 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
KAV
Forum Haunter / Завсегдатай форума
Участник № / Member № 2889
отправлено / posted
Используется стандартный формат Си вывода чисел. В этом формате отображение всегда наследует знак исходного числа (даже при округлении).
Сообщения / Posts 17317 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Eman1982
Forum Member / Участник форума
Участник № / Member № 5619
отправлено / posted
Я проверял подобную процедуру на С++. Ничего похожего не происходит. Можете проверить.
Сообщения / Posts 45 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
отправлено / posted
Ну судя из ответа поддержки. процедура языка С++ не использует стандартный формат вывода чисел системы Си. Видимо С++ использует что то другое.
Сообщения / Posts 112 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Eman1982
Forum Member / Участник форума
Участник № / Member № 5619
отправлено / posted
Денис, вынужден признать что да, проверка осуществленная мною в BC++ Builder 5 была выполнена не совсем корректно.
Перепроверил я на старом досовском Borland C++ 3.0 вывод на экран:
отправлено / posted
Как исправить Чет маялся маялся не как не получается. И на ST писал. Не реагирует вообще. Если делать без обработки канала. Тоесть IN[002] пытаюсь в R[000]. Если IN = таму, дай нам чемы хотим в R
Сообщения / Posts 112 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Eman1982
Forum Member / Участник форума
Участник № / Member № 5619
отправлено / posted
В РП Том1, стр. 174 написано, что можно использовать "трансляцию", т.е. вызов каналом программы для преобразования его атрибутов. Но пока у меня тоже не получается.
Сообщения / Posts 45 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
отправлено / posted
Если как не то получится напишите если не сложно. А то у меня тоже давление в -0,0.
Сообщения / Posts 112 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Eman1982
Forum Member / Участник форума
Участник № / Member № 5619
отправлено / posted
Денис, у меня получилось решить проблему довольно изящно через трансляцию. Дайте мейл- кину вам.
Сообщения / Posts 45 | Из / From: Ukraine
| IP / IP: IP адрес / IP address |
[ 10.06.2013, 08:15: Сообщение отредактировал / Message edited by AdAstra Technical Support ]
Сообщения / Posts 112 | Из / From: Россия
| IP / IP: IP адрес / IP address |
Eman1982
Forum Member / Участник форума
Участник № / Member № 5619