Возможный дубликат:
Есть ли setprecision в c ++ round? Если так, то почему я это вижу?
Вот функция, которую я использую
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, то результат должен быть округлен до следующего значения.
0.89425 не представляется точно в двоичной плавающей точке; ближайшее точно представимое значение равно 0,894249999999999989341858963598497211933135986328125, которое правильно округлено до десятичного 0,8942.
Если вы хотите увидеть поведение десятичного округления, используйте фиксированную или десятичную с плавающей точкой.
Других решений пока нет …