将纳秒转换为秒和纳秒

converting nanoseconds to seconds and nanoseconds

本文关键字:转换      更新时间:2023-10-16

我有一个非常大的纳秒值(表示自epoch以来的纳秒),我试图将其分解为自epoch以来的秒数和纳秒,如下所示:

uint64_t nanosecondsEpoch;
unsigned secs = nanosecondsEpoch / 1000000000ULL;
unsigned nanos = nanosecondsEpoch - (secs * 1000000000ULL);

问题是如果我试着像这样把它们缝在一起:

uint64_t stichBack = secs * 1000000000ULL + nanos

我得到了一些完全错误的东西。我认为原因是当我执行除法时,我得到的是1357314854.03秒,而0.03被省略了(造成了很大的差异)。但我很困惑,因为我觉得我应该能够保存这两个信息在unsigned和恢复信息不诉诸浮点数?我是不是做了一些很傻的算术,我好像搞不懂?

下面是一个具体的例子:

从今天早上的某个时间开始的纳秒数:1357314854032484000

我会使用uint64_t,如果我可以为秒和纳秒unsigned,但我想知道的是为什么我不能打破上面的值如上并把它放回一起。

由于1e9小于2^32-1(最大无符号32位整数),如果原始值足够大,商仍然可能太大而无法容纳32位整数。不确定你的原始值是什么,但有可能你截断你的secs值作为结果。