Float formatting in C++

eveo picture eveo · Jan 21, 2013 · Viewed 86k times · Source

How do you format a float in C++ to output to two decimal places rounded up? I'm having no luck with setw and setprecision as my compiler just tells me they are not defined.

cout << "Total : " << setw(2) << total << endl;

total outputs: Total : 12.3961

I'd like it to be: 12.40 or 12.39 if it's too much work to round up.

Answer

Jon Spencer picture Jon Spencer · Aug 6, 2014

Use cout << fixed or cout.setf(ios::fixed), and std::cout.precision(<# of decimal digits>) as in the following (using the Clang-503.0.40 compiler included with OSX Mavericks):

#include <iostream>

int main()
{
   using namespace std;

   float loge = 2.718;
   double fake = 1234567.818;
   cout << fixed;
   cout.precision(2);
   cout << "loge(2) = " << loge << endl;
   cout << "fake(2) = " << fake << endl;
   cout.precision(3);
   cout << "loge(3) = " << loge << endl;
   cout << "fake(3) = " << fake << endl;
}

The output from this is (note the rounding):

loge(2) = 2.72
fake(2) = 1234567.82
loge(3) = 2.718
fake(3) = 1234567.818

This is the simple version. In lieu of using cout << fixed;, you can use cout.setf(ios::fixed); (for displaying scientific notation, replace fixed with scientific; both will set the number of digits to the right of the decimal point). Note the cout.precision() is also used to set the number of digits displayed in total on either side of the decimal point if the format flags do not include fixed or scientific. There are tutorials for this on the Internet.