2009-02-25 2 views

ответ

17

Включить стандартный заголовок <iomanip> и сходят с ума. В частности, манипулятор setw устанавливает ширину выходного сигнала. setfill задает символ заполнения.

+3

+1 для буквально сходит с ума. – Anonymous

+0

Не забудьте 'std :: left' для выравнивания по левому краю. –

+0

Есть ли веская причина, почему 'printf()' не будет хорошим выбором? –

15
std::cout << std::setiosflags(std::ios::fixed) 
      << std::setprecision(3) 
      << std::setw(18) 
      << std::left 
      << 12345.123; 
11

Вы можете также рассмотреть более дружественную функциональные возможности, предоставляемые одним из них:

  • Boost.Format (мощный, но очень тяжелый, больше времени и распределения памяти, чем другие упомянутые)
  • Loki.SafeFormat
  • FastFormat (относительно новый, но пылающий быстрая библиотека, также типобезопасным в отличие от остальных)

Запись из памяти, но должно быть что-то вдоль этих линий:

// Dumb streams: 
printf("%-14.3f%-14.3f\n", 12345.12345, 12345.12345); 

// For IOStreams you've got example in the other answers 

// Boost Format supports various flavours of formatting, for example: 
std::cout << boost::format("%-14.3f%-14.3f\n") % a % b; 
std::cout << boost::format("%1$-14.3f%2$-14.3f\n") % a % b; 
// To gain somewhat on the performance you can store the formatters: 
const boost::format foo("%1$-14.3f%2$-14.3f\n"); 
std::cout << boost::format(foo) % a % b; 

// For the Loki::Printf it's also similar: 
Loki::Printf("%-14.3f%-14.3f\n")(a)(b); 

// And finally FastFormat.Format (don't know the syntax for decimal places) 
fastformat::fmtln(std::cout, "{0,14,,<}{1,14,,>}", a, b); 

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

+0

можешь добавить ссылки? – jwfearn

+0

Ссылки сейчас, примеры завтра днем ​​(GMT) – Anonymous

Смежные вопросы