Что это (ошибка в вычислениях)?
- Войдите на сайт для отправки комментариев
Сб, 08/06/2013 - 10:36
Простенький скетч
unsigned int syncYear;
unsigned int syncMonth;
unsigned int syncDay;
float ParamValue=1306.08;
void setup(){
Serial.begin(115200);
syncYear=int(ParamValue/100);
Serial.println(syncYear);
syncMonth=int(ParamValue-syncYear*100);
Serial.println(syncMonth);
syncDay=int((ParamValue*100-syncYear*10000-syncMonth*100));
Serial.println(syncDay);
}
void loop(){
}
На входе приходит float ParamValue с датой в формате YYMM.DD
Дальше эту дату разбираем на составляющие, но особенность в том, что syncDay - считается не всегда правильно. К примеру, исполнение этого кода дает:
13 6 7
Но на входе-то было 1306.08
Почему так? Как обойти?
float это часто не точно. Добавьте в начало Serial.println(ParamValue);
разберитесь как работает int() и умножение float на int.
попробуйте в 13 строке умножить ParamValue на 101.
Выкрутился так: