Проблема с преобразованием ЧЧ:ММ:СС в секунды
- Войдите на сайт для отправки комментариев
Пт, 31/08/2018 - 15:38
Уперся в странный результат при переводе часов-минут-секунд в секунды
Время получаю с RTC. Вот код
// текущее время 14:26:34 unsigned long mytime = hour(t)*60; Serial.println(mytime); // выдает ожидаемые минуты 840 mytime = (mytime + minute(t)) *60; Serial.println(mytime); // теперь добавляем минуты и переводим в секунды 51960, тоже ОК mytime = mytime + second(t); Serial.println(mytime); // ну и в результате 51994 unsigned long mytime2 = hour(t)*60*60 + minute(t) *60 +second(t); Serial.println(mytime2); // теперь сводим все в одну строку и получаем 4294953754.... Холмс, но как?
В итоге совершенно два разных результата.
Можно, конечно, оставить пошаговое суммирование, но как-то не серьезно выходит
Очевидно, я упускаю что-то простое - но не вижу. Хелп.
Да, в начале
а если так:
Работает :) спасибо
в чем была фишка? hour(t)*60*60 не преобразовывался, а оставался в int?
еще раз подумате над разницей:
Это называется "стандарт языка", каждая арифметическая операция производится в формате того оператора, который "точнее" в неком смысле.
Если один лонг - то в лонге, если флоат, то с плавающей точкой. Если НИЧЕГО НЕ УКАЗАНО, то формате int. ИНТ у нас, в ардуино - 16 разрядов.
То есть, чтобы считать в лонге нужно это явно указать, чтобы в ulong - тоже указать. иначе компилятор делает код, который считает в инт.
я по непонятной причине полагал, что компилятор это проверит и предупредит :)
я по непонятной причине полагал, что компилятор это проверит и предупредит :)
Просто компилятор намного умнее Вас. Он с дураками не спорит...
...