我有一个方法以以下格式返回时间的字符串表示形式:_HH:MM:SS.sss 该方法以微秒为单位的 uint64_t 时间作为参数。我可以很容易地将小时和分钟分开,但是当涉及到秒时,我需要转换为双精度,这样我也可以获得秒的分数。
示例代码:
std::string getDurationTime(uint64_t time){
std::string returnTime="";
uint64_t tempTime = time;
uint64_t hours = (tempTime / 3600000000);
tempTime -= (hours * 3600000000);
uint64_t minutes = (tempTime / 60000000);
tempTime -= (minutes * 60000000);
double seconds = (double(tempTime) / 1000000);
stringstream timeOut;
timeOut<<std::setw(2)<<std::setfill('0')<<hours<<":"<<std::setw(2)<<std::setfill('0')<<minutes<<":"<<std::fixed<<std::setw(6)<<std::setprecision(3)<<std::setfill('0')<<seconds;
returnTime = "_" + timeOut.str();
return returnTime;
}
所以像 103566 这样的数字应该返回 _00:00:00:104 的值,但它返回的是 _00:00:00:103。当我在秒上设置一个断点时,值为 0.103499999。是否有针对此精度进行调整的标准技术?如果我将 .000001 添加到生成的秒数中,它是否会每次都为该精度解决问题?
任何建议表示赞赏。