How does duration_cast round

偶尔善良 提交于 2020-02-23 09:15:33

问题


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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!