在时间和微秒之间准确转换

时间:2017-07-02 16:36:47

标签: c linux time glibc

t = 8.376600;

如果我按以下方式计算tv

tv->tv_sec = (long) floor (time);
tv->tv_usec = (long) ((time - tv->tv_sec) * 1000000);

然后tv->tv_sec == 8tv->tv_usec == 376599

printf("%f %ld.%06ld\n", time, tv->tv_sec, tv->tv_usec);打印 8.376600 8.376599

有什么简单的方法可以让两个输出相同吗?

1 个答案:

答案 0 :(得分:2)

在您的代码中,您将值向下舍入,而printf将其舍入到最接近的微秒。

以下是替代版本:

#include <math.h>
#include <time.h>

void set_timespec(struct timespec *tv, double time) {
    long long usec = round(time * 1000000);
    tv->tv_sec = usec / 1000000;
    tv->tv_usec = usec % 1000000;
}