我需要以纳秒为单位的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
。