2

重複の可能性:
c++ で setprecision は丸められますか? もしそうなら、なぜ私はこれを見ているのですか?

ここに私が使用している関数があります

char* round(double value, int decimal_places)
{
decimal_places = decimal_places+1;
std::stringstream s2;
   s2 << std::setprecision(decimal_places) << std::setiosflags(std::ios_base::fixed) << value;
std::string st = s2.str();
  return st;
}

私の入力値は 0.89425 で、小数宮殿の数は 4 です

私の出力は 0.8942 ですが、0.8943 が必要です。つまり、必要な小数点以下の桁数が 5 以上の場合、出力は次の値に丸められる必要があります。

4

1 に答える 1

1

0.89425 は 2 進浮動小数点では正確に表現できません。正確に表現できる最も近い値は 0.894249999999999989341858963598497211933135986328125 で、10 進数の 0.8942 に正しく丸められます。

10 進数の丸め動作を確認したい場合は、固定小数点または 10 進浮動小数点を使用してください。

于 2012-11-28T10:34:30.917 に答える