с плавающей точкой — точность C ++ — поведение setprecision

Насколько я понимаю, функция setprecision определяет минимальную точность, но когда я запускаю следующий код, я получаю только 3 числа после десятичной точки:

int main()
{
double a = 123.4567890;
double b = 123.4000000;
std::cout << std::setprecision(5) << a << std::endl; // Udesireble
std::cout.setf(std::ios::fixed);
std::cout << std::setprecision(5) << a << std::endl; // Desireble

std::cout << std::setprecision(5) << b << std::endl; // Udesireble
std::cout.unsetf(std::ios::fixed);
std::cout << std::setprecision(5) << b << std::endl; // Desireble
return 0;
}

который печатает:

123.46      // Udesireble
123.45679   // Desireble
123.40000   // Udesireble
123.4       // Desireble

Можно ли как-нибудь избежать проверки количества цифр после десятичной точки, чтобы узнать, нужно ли устанавливать фиксированное значение?

2

Решение

У меня сложилось впечатление, что вам нужно будет отформатировать в string сначала, а затем замените конечные нули пробелами.

1

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

Для потоков вы можете использовать две функции.
setfill(char_type c), который устанавливает символ для записи, чтобы соответствовать количеству необходимого символа (больше информации Вот)

Существует функция setw (int), которая устанавливает ширину поля отображаемого значения. (документация Вот )

Используя эти функции, вы можете иметь решение

0

По вопросам рекламы [email protected]