Обнаружил забавный баг: Есть канал 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 :