我有一个非常大的纳秒值(代表自纪元以来的纳秒),我试图将其细分为自纪元以来的秒和纳秒,如下所示:
uint64_t nanosecondsEpoch;
unsigned secs = nanosecondsEpoch / 1000000000ULL;
unsigned nanos = nanosecondsEpoch - (secs * 1000000000ULL);
问题是,如果我尝试将其缝合在一起,如下所示:
uint64_t stichBack = secs * 1000000000ULL + nanos
我得到了一些遥不可及的东西。我认为原因是当我执行除法运算时,我得到1357314854.03秒钟,而0.03下降了(造成较大的差异)..但是我感到困惑,因为感觉我应该能够将这两条信息都保存在其中一个未签名的并恢复信息而不求助于浮点数?我在做一些我似乎无法理解的算术傻傻的事情吗?
这是一个具体示例:
自今天早晨夏时制以来的纳秒值:1357314854032484000
如果可以同时使用秒和十亿分之一秒的无符号符号,我会使用uint64_t,但是我想知道的是为什么我不能打破上面的值并将其放回去。
最佳答案
由于1e9
小于2^32-1
(最大无符号32位整数),因此,如果原始值足够大,则商可能仍然太大而无法容纳32位整数。不知道您的原始值是什么,但是结果可能是您截断了secs
值。
关于c++ - 将纳秒转换为秒和纳秒,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14161251/