如何将unix时间戳(以纳秒为单位)转换为秒而不丢失精度[c++ 17]



我需要以纳秒为单位的unix时间以秒为单位,但是不想失去"精度">。所以我试着把整型变量转换成双精度,期望128除以10等于12.8。但在这个例子中,我失去了精度,只得到了12。我做错了什么,或者我的理解有什么问题?这是我尝试过的:

#include <iostream>
#include <chrono>
using namespace std;
int main()
{

int64_t a = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::system_clock::now().time_since_epoch()).count();

double b = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::system_clock::now().time_since_epoch()).count() / (1000 * 1000 * 1000);

cout<<(a) << " ns n";

cout.precision(9);
cout << fixed << b << " s" << endl;

return 0;
}

1668199112421581468 ns 
1668199112.000000000 s
Wanted: 1668199112.421581468 s

count返回整型,因为std::chrono::nanoseconds::rep(表示类型)是至少64位的整型。

您可以使用std::chrono::duration<double>,它支持小数秒。不需要自己做数学计算,duration_cast知道std::chrono::duration::period

相关内容

  • 没有找到相关文章

最新更新