Соответствие форматированию printf с iomanip

У меня есть старый C-код, который я пытаюсь повторить в C ++. Он использует printf модификаторы: «% 06.02f».

Я наивно думал что iomanip был так же способен, и сделал:

cout << setfill('0') << setw(6) << setprecision(2)

Когда я пытаюсь вывести тест номер 123.456, printf выходы:

123,46

Но cout выходы:

1,2 + E02

Есть ли что-нибудь, что я могу сделать в iomanip чтобы повторить это, или я должен вернуться к использованию printf?

[Живой пример]

7

Решение

Три спецификатора формата 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, Форматирование по умолчанию пытается получить «лучший» из других форматов, предполагая использование фиксированного количества цифр.

Точность, ширина и символ заполнения соответствуют тому, как вы уже указали.

2

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

Пытаться std::fixed:

std::cout << std::fixed;

Устанавливает floatfield флаг формата для потока str установлен.

когда floatfield установлен в fixedзначения с плавающей запятой записываются с использованием записи с фиксированной запятой: значение представлено точно таким же количеством цифр в десятичной части, как указано поле точности (precision) и без экспонентной части.

4

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