Boost.Chronoには、duration間の型変換において丸めが発生する場合に明示的に切り捨てを行うためのduration_cast()という関数が用意されていました。
Boost 1.48.0から、従来のduration_cast()に加えて、切り捨てを行うfloor()、最近接偶数への丸めを行うround()(※四捨五入ではない)、切り上げを行うceil()という、3つの関数が追加されました。
#include <iostream> #include <boost/chrono/duration.hpp> #include <boost/chrono/chrono_io.hpp> #include <boost/chrono/floor.hpp> #include <boost/chrono/round.hpp> #include <boost/chrono/ceil.hpp> namespace chrono = boost::chrono; int main () { chrono::milliseconds ms(2500); { chrono::seconds s = chrono::duration_cast<chrono::seconds>(ms); std::cout << "duration_cast : " << s << std::endl; } { chrono::seconds s = chrono::floor<chrono::seconds>(ms); std::cout << "floor : " << s << std::endl; } { chrono::seconds s = chrono::round<chrono::seconds>(ms); std::cout << "round : " << s << std::endl; } { chrono::seconds s = chrono::ceil<chrono::seconds>(ms); std::cout << "ceil : " << s << std::endl; } }
duration_cast : 2 seconds floor : 2 seconds round : 2 seconds ceil : 3 seconds
リファレンス:
Chrono Rounding Utilities - Boost Chrono Library
この機能の元となったHorward Hinnantの提案は以下:
<chrono> utilities