2009-02-25 28 views

Trả lời

17

Bao gồm tiêu đề chuẩn <iomanip> và đi điên. Cụ thể, trình xử lý setw đặt độ rộng đầu ra. setfill đặt ký tự điền.

+3

+1. – Anonymous

+0

Đừng quên 'std :: left' để căn trái. –

+0

Có lý do chính đáng nào để 'printf()' không phải là một lựa chọn tốt? –

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

Bạn cũng có thể xem xét các chức năng thân thiện hơn được cung cấp bởi một trong những:

  • Boost.Format (mạnh mẽ, nhưng rất nặng, nhiều thời gian hơn và phân bổ bộ nhớ so với số khác được đề cập)
  • Loki.SafeFormat
  • FastFormat (tương đối mới, nhưng rực thư viện nhanh chóng, cũng gõ an toàn không giống như những người khác)

Viết từ bộ nhớ, nhưng nên có một cái gì đó dọc theo những dòng:

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

Ngoài ra, nếu bạn có kế hoạch để dính với bất kỳ thư viện định dạng nào, kiểm tra kỹ các hạn chế của chúng trong ngữ cảnh rõ ràng, tính di động (và sự phụ thuộc thư viện khác), hiệu quả, hỗ trợ quốc tế hóa, an toàn loại, v.v.

+0

bạn có thể thêm liên kết không? – jwfearn

+0

Liên kết ngay, ví dụ chiều mai (giờ GMT) – Anonymous

Các vấn đề liên quan