问题
If I convert to a coarser unit of time (say std::chrono::minutes
to std::chrono::hours
) how will duration_cast
round? For example, what value will std::chrono::minutes(91)
become if converted to std::chrono::hours
? 2h, 1h?
回答1:
duration_cast
always rounds towards zero. I.e. positive values round down and negative values round up.
For other rounding options see:
http://howardhinnant.github.io/duration_io/chrono_util.html
floor
, ceil
, and round
are currently in the draft C++ 1z (hopefully C++17) draft working paper. In the meantime feel free to use the code at chrono_util.html, and please let me know if you have any problems with it.
C++ 17 update
- std::chrono::floor
- std::chrono::ceil
- std::chrono::round
std::chrono::floor<std::chrono::seconds>(1400ms) == 1s
std::chrono::floor<std::chrono::seconds>(1500ms) == 1s
std::chrono::floor<std::chrono::seconds>(1600ms) == 1s
std::chrono::floor<std::chrono::seconds>(-1400ms) == -2s
std::chrono::floor<std::chrono::seconds>(-1500ms) == -2s
std::chrono::floor<std::chrono::seconds>(-1600ms) == -2s
来源:https://stackoverflow.com/questions/36122428/how-does-duration-cast-round