floor和duration_cast有什么区别? [英] What's the Difference Between floor and duration_cast?
问题描述
因此在c ++ 11 计时库提供了 duration_cast
:
So in c++11 the Chrono Library provides, duration_cast
:
计算以可用的最大类型进行,并像通过static_cast一样转换为结果类型仅在完成后
Computations are done in the widest type available and converted, as if by static_cast, to the result type only when finished
返回小于或等于d的ToDuration可表示的最大持续时间t
Returns the greatest duration t representable in ToDuration that is less or equal to d
因此对于所有 x
这两个调用的结果将相等:
So for all x
will the result of these 2 calls be equal:
-
chrono :: duration_cast< ; chrono :: se conds>(x)
-
chrono :: floor< chrono :: seconds>(x)
chrono::duration_cast<chrono::seconds>(x)
chrono::floor<chrono::seconds>(x)
推荐答案
据我所知,与之间的区别相同static_cast
和 std :: floor
:负数会四舍五入,而不是被截断为零。
As far as I can tell, same as the difference between static_cast
and std::floor
: Negatives are rounded down instead of truncated toward zero.
#include <iostream>
#include <chrono>
using namespace std::chrono_literals;
int main() {
std::cout << "duration_cast:" << std::endl;
std::cout << "1.4s: " << std::chrono::duration_cast<std::chrono::seconds>(1400ms).count() << std::endl;
std::cout << "1.5s: " << std::chrono::duration_cast<std::chrono::seconds>(1500ms).count() << std::endl;
std::cout << "1.6s: " << std::chrono::duration_cast<std::chrono::seconds>(1600ms).count() << std::endl;
std::cout << "-1.4s: " << std::chrono::duration_cast<std::chrono::seconds>(-1400ms).count() << std::endl;
std::cout << "-1.5s: " << std::chrono::duration_cast<std::chrono::seconds>(-1500ms).count() << std::endl;
std::cout << "-1.6s: " << std::chrono::duration_cast<std::chrono::seconds>(-1600ms).count() << std::endl;
std::cout << "floor:" << std::endl;
std::cout << "1.4s: " << std::chrono::floor<std::chrono::seconds>(1400ms).count() << std::endl;
std::cout << "1.5s: " << std::chrono::floor<std::chrono::seconds>(1500ms).count() << std::endl;
std::cout << "1.6s: " << std::chrono::floor<std::chrono::seconds>(1600ms).count() << std::endl;
std::cout << "-1.4s: " << std::chrono::floor<std::chrono::seconds>(-1400ms).count() << std::endl;
std::cout << "-1.5s: " << std::chrono::floor<std::chrono::seconds>(-1500ms).count() << std::endl;
std::cout << "-1.6s: " << std::chrono::floor<std::chrono::seconds>(-1600ms).count() << std::endl;
return 0;
}
。
duration_cast:
1.4s: 1
1.5s: 1
1.6s: 1
-1.4s: -1
-1.5s: -1
-1.6s: -1
floor:
1.4s: 1
1.5s: 1
1.6s: 1
-1.4s: -2
-1.5s: -2
-1.6s: -2
https://wandbox.org/permlink/SsmpRz6RkvbL6Sru
这篇关于floor和duration_cast有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!