пользовательские функции — ошибка при округлении десятичных полей в C ++ с использованием setprecision

Возможный дубликат:
Есть ли 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, то результат должен быть округлен до следующего значения.

2

Решение

0.89425 не представляется точно в двоичной плавающей точке; ближайшее точно представимое значение равно 0,894249999999999989341858963598497211933135986328125, которое правильно округлено до десятичного 0,8942.

Если вы хотите увидеть поведение десятичного округления, используйте фиксированную или десятичную с плавающей точкой.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector