У меня есть старый C-код, который я пытаюсь повторить в C ++. Он использует printf
модификаторы: «% 06.02f».
Я наивно думал что iomanip
был так же способен, и сделал:
cout << setfill('0') << setw(6) << setprecision(2)
Когда я пытаюсь вывести тест номер 123.456, printf
выходы:
123,46
Но cout
выходы:
1,2 + E02
Есть ли что-нибудь, что я могу сделать в iomanip
чтобы повторить это, или я должен вернуться к использованию printf
?
Три спецификатора формата C отображаются на соответствующие настройки формата в C ++ IOStreams:
%f
-> std::ios_base::fixed
(запись с фиксированной точкой) обычно устанавливается с помощью out << std::fixed
,%e
-> std::ios_base::scientific
(научное обозначение) обычно устанавливается с помощью out << std::scientific
,%g
-> настройка по умолчанию, обычно устанавливается с помощью out.setf(std::fmtflags(), std::ios_base::floatfield)
или с C ++ 11 и выше out << std::defaultfloat
, Форматирование по умолчанию пытается получить «лучший» из других форматов, предполагая использование фиксированного количества цифр.Точность, ширина и символ заполнения соответствуют тому, как вы уже указали.
Пытаться std::fixed
:
std::cout << std::fixed;
Устанавливает
floatfield
флаг формата для потока str установлен.когда
floatfield
установлен вfixed
значения с плавающей запятой записываются с использованием записи с фиксированной запятой: значение представлено точно таким же количеством цифр в десятичной части, как указано поле точности (precision
) и без экспонентной части.