Что это (ошибка в вычислениях)?
- Войдите на сайт для отправки комментариев
Сб, 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.
Выкрутился так: