给定一个微秒值,如何准确获取timeval结构? / *更新获得负值* /

时间:2015-04-27 15:21:41

标签: c++ timestamp double rounding

这是转换微秒并在我的应用程序中将其表示为时间间隔的正确方法吗?我需要使用struct timeval,上面的代码是将double微秒转换为timeval的例程的一部分

此代码中的负值

// UPDATE

#include <iostream>
#include <sys/time.h> 
#include <stdint.h>

void convert(uint64_t offset , struct timeval t)
{

std::cout <<  "currentTimeOffset " << offset / 1000000 << "startTimeOffset " << t.tv_sec  << std::endl;
t.tv_usec =  offset % 1000000L;
std::cout <<  "stattime usec " <<  t.tv_usec << std::endl ;


}

int main(int argc , char** argv)
{

struct timeval test;

uint64_t t = 18446744073709551615;
convert(t , test);

return 0;
}

2 个答案:

答案 0 :(得分:1)

这是一个很好的问题。我不是舍入错误的专家,但我认为通常用浮动数字做的工作越少越准确。

根据这个原则,我很想将数字转换为整数一次,然后在不使用像这样的浮点数的情况下将其分解:

timeval convert(double microseconds)
{
    long u = std::round(microseconds);

    timeval time;
    time.tv_sec = u / 1000000;
    time.tv_usec = u - (time.tv_sec * 1000000);

    return time;
}

答案 1 :(得分:0)

类似的东西:

timeval to_timeval(double usec) {
    return { usec / 1000000, usec % 1000000 };
}