使用setprecision在C ++中舍入十进制字段时发出问题

时间:2012-11-28 10:29:17

标签: c++ user-defined-functions decimal-point

  

可能重复:
  Does setprecision in c++ round? If so why am I seeing this?

这是我正在使用的功能

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,即如果我所需的小数位后面的下一位数是&gt; = 5那么输出应该四舍五入到下一个值。

1 个答案:

答案 0 :(得分:1)

0.89425在二进制浮点中不能完全表示;最接近的完全可表示的值是0.894249999999999989341858963598497211933135986328125,正确舍入为十进制0.8942。

如果要查看十进制舍入行为,请使用定点或十进制浮点。