可能重复:
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那么输出应该四舍五入到下一个值。
答案 0 :(得分:1)
0.89425在二进制浮点中不能完全表示;最接近的完全可表示的值是0.894249999999999989341858963598497211933135986328125,正确舍入为十进制0.8942。
如果要查看十进制舍入行为,请使用定点或十进制浮点。