1

次の形式で時間の文字列表現を返すメソッドがあります。_HH:MM:SS.sssこのメソッドは、マイクロ秒単位のuint64_t時間を引数として取ります。時間と分を簡単に分割できますが、秒に関しては、秒の端数も取得できるように、2倍にキャストする必要があります。

サンプルコード:

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 に答える