Ошибка в коде

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Ответить
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Ошибка в коде

Сообщение Alex » Чт ноя 01, 2012 12:10 pm

Код

Код: Выделить всё

int temp1 = (current_temp1 - (int)current_temp1) * 100;

sprintf(buf, "GET /objects/?object=sensorKotel&op=m&m=tempChanged&t=%0d.%d HTTP/1.0", (int)current_temp1, abs(temp1));
совершает аж 2 ошибки

во-первых теряется «минус» между значениями -1 и 0. Значение -0,5 превращается в 0,5. И этот диапазон показывается температуру на луне.

во-вторых некорректно переводятся сотые доли. Значение 0,06 передаётся как 0,6. На улице 0, а показывает почти 1 градус.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Ошибка в коде

Сообщение sergejey » Чт ноя 01, 2012 6:13 pm

Ок, а как правильно-то? )

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Alex
Сообщения: 2357
Зарегистрирован: Пт апр 20, 2012 12:53 pm
Благодарил (а): 42 раза
Поблагодарили: 262 раза

Re: Ошибка в коде

Сообщение Alex » Чт ноя 01, 2012 8:11 pm

Как правильно я хз, потму, что не программист, но для себя нарисовал такой костыль.

Код: Выделить всё

 if ((current_temp1 < 0) && (current_temp1 > -1)) {
        setReqSensor2("tempStreet", "-", (int)current_temp1, abs(temp1_)); 
      } else {
         setReqSensor2("tempStreet", "", (int)current_temp1, abs(temp1_)); 
      }
Вызывается такая функция

Код: Выделить всё

 void setReqSensor2(char s[], char ss[], int n, int nn) {
  sprintf(buf, "GET /objects/?object=%s&op=m&m=statusChanged&v=%s%0d.%d HTTP/1.0", s, ss, n, nn);
  sendHTTPRequest();
} 
функция введена раньше по необходимости (для экономии оперативной памяти).

С сотыми долями пока не разбирался.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4286
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 76 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Ошибка в коде

Сообщение sergejey » Пт ноя 02, 2012 11:05 am

Я на processing тоже не сильный программист, поэтому переспросил )
В общем, надо поискать в сети решение.

А насчёт функции это хорошо -- возьму на вооружение.

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Ответить