Округление длительности вниз в C++
Обрезка длительности к более ранней минуте,
а не к нулю, делает floor из
<chrono>.
На отрицательном интервале это заметнее, чем
при усечении через duration_cast.
Запишем секунды, получим минуты обоими
способами и выведем оба счетчика:
#include <chrono>
#include <iostream>
std::chrono::seconds span{-90};
auto by_cast =
std::chrono::duration_cast<std::chrono::minutes>(span);
auto by_floor =
std::chrono::floor<std::chrono::minutes>(span);
std::cout << by_cast.count() << "\n";
std::cout << by_floor.count() << "\n";
Первая строка показывает усечение к нулю
(-1 минута), вторая - округление вниз
до целых минут (-2 минуты) для тех же
90 секунд.
Объявите std::chrono::seconds left
равным -200. Выведите счетчик
std::chrono::floor<std::chrono::minutes>
от left.