说t = 8.376600;
如果我按以下方式计算tv
:
tv->tv_sec = (long) floor (time);
tv->tv_usec = (long) ((time - tv->tv_sec) * 1000000);
然后tv->tv_sec == 8
和tv->tv_usec == 376599
。
printf("%f %ld.%06ld\n", time, tv->tv_sec, tv->tv_usec);
打印
8.376600 8.376599
。
有什么简单的方法可以让两个输出相同吗?
答案 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;
}