1

我有一个方法以以下格式返回时间的字符串表示形式:_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 添加到生成的秒数中,它是否会每次都为该精度解决问题?

任何建议表示赞赏。

4

1 回答 1

2

您可以使用seconds = round(seconds * 1000.0) / 1000.0;将您的数字四舍五入到每秒数千。

于 2013-01-14T19:22:57.907 回答