Отображать числа с дополнением и фиксированным количеством цифр в C++

Я хотел бы отображать числа, используя отступы (при необходимости) и фиксированное количество цифр. Например, учитывая следующие числа:

48.3
0.3485
5.2

Отобразите их так:

48.30
00.35
05.20

Я пробую комбинации std::fixed, std::fill, std::setw и std::setprecision, но не могу получить то, что ищу. Хотелось бы руководства!

ПРИМЕЧАНИЕ. 0-заполнение на самом деле не критично, но я бы все же хотел, чтобы числа были выровнены так, чтобы десятичная точка находилась в одном столбце.


person aardvarkk    schedule 27.04.2013    source источник
comment
arachnoid.com/cpptutor/student3.html   -  person Martin Kristiansen    schedule 27.04.2013


Ответы (1)


Это довольно просто

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    cout << fixed << setprecision(2) << setfill('0');
    cout << setw(5) << 48.3 << endl;
    cout << setw(5) << 0.3485 << endl;
    cout << setw(5) << 5.2 << endl;
}

Однако написание такого кода заставляет меня тосковать по printf.

person john    schedule 27.04.2013
comment
Это ломается, если setprecision становится слишком высоким. Должно ли setw быть больше, чем setprecision + 3 или что-то в этом роде? - person aardvarkk; 27.04.2013
comment
Если вам нужны две начальные цифры и десятичная точка, тогда да, setw должно быть = = setprecision + 3. - person john; 27.04.2013
comment
В качестве дополнительного примечания, я думаю, что большой проблемой было то, что я (ранее в строке) устанавливал выравнивание с помощью std::left. Это также портит это решение, поэтому я должен был убедиться, что он снова установлен на std::right, чтобы это сработало. - person aardvarkk; 03.05.2013
comment
Хотя это заставляет меня скучать по printf, мне нравится способ C++, потому что я могу применить его к stringstream и получить вывод как string - person Everyone; 03.12.2017