2009-02-25 10 views

Répondre

17

Inclure l'en-tête standard <iomanip> et devenir fou. Plus précisément, le manipulateur setw définit la largeur de sortie. setfill définit le caractère de remplissage.

+3

+1 pour aller littéralement fou. – Anonymous

+0

Ne pas oublier 'std :: left' pour l'alignement de gauche. –

+0

Existe-t-il une bonne raison pour que 'printf()' ne soit pas un bon choix? –

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

Vous pouvez également envisager une fonctionnalité plus conviviale créée par l'un de ces:

  • Boost.Format (puissant, mais très lourd, plus de temps et allocations de mémoire que les autres mentionnés)
  • Loki.SafeFormat
  • FastFormat (relativement nouveau, mais flamboyante bibliothèque rapide, typées aussi à la différence des autres)

L'écriture de la mémoire, mais devrait être quelque chose le long de ces lignes:

// 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); 

En outre, si vous prévoyez de coller avec l'une de ces bibliothèques de mise en forme, examiner à fond leurs limites dans le contexte de expressibilité, la portabilité (et d'autres dépendances de la bibliothèque), l'efficacité, le soutien de l'internationalisation, de type sécurité, etc.

+0

pourriez-vous ajouter des liens? – jwfearn

+0

Liens maintenant, exemples demain après-midi (heure GMT) – Anonymous