C++1z 時間の丸め演算

時間ユーティリティライブラリの<chrono>には、精度が下がる単位変換をする場合に使用するduration_cast()関数があります。

C++1zでは、このときの丸め演算をユーザーが選択するための機能が導入されます。

まず、整数を時間間隔の値型とするdurationのための、floor() (切り下げ)、ceil() (切り上げ)、round() (最近接偶数への丸め)。それと符号あり整数の時間間隔を持つdurationのためのabs() (絶対値)。

#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    milliseconds ms(2500);
    seconds sec = round<seconds>(ms); // 500は精度落ちする

    std::cout << sec.count() << std::endl; // 2
}

それと、そのdurationを持つtime_pointのための、floor()ceil()round()が入ります。

Boost 1.61.0時点のBoost.Chronoライブラリには、durationに対するfloor()ceil()round()があります。

参照

お断り

この記事の内容は、C++1zが正式リリースされる際には変更される可能性があります。正式リリース後には、C++日本語リファレンスサイトcpprefjpの以下の階層の下に解説ページを用意する予定です。