#include <iostream>
#include <iomanip>
using std::cout;
using std::fixed;
using std::showpoint;
using std::setprecision;
int main()
{
double number = 85495.5432334;
cout << fixed << showpoint << setprecision(2) << setw(15) <<
"string" << setw(15) << "$" << number;
return 0;
}
The above code outputs the $ as right justified in 15 characters, but it does not right justify the number. How do I print out the '$' character and the following number together as one item that is right justified in 15 characters without losing my showpoint/setprecision/fixed manipulations?
I tried using "$"+number.toString(), and this makes the result right justified, but this ruins the showpoint/fixed/setprecision(2) manipulations I want. How do I get it all together?
If your number is left aligned, just put the dollar sign first.
std::cout
<< '$' // (the dollar sign is separate from the number)
<< std::left << std::fixed << std::setw(15) << std::setprecision(2) << number;
<< "\n";
If you wish to right-align your output, and you wish the dollar-sign to stick to your number, you have to build a temporary string. This looks a lot like before:
// build the temporary string with both the dollar sign and the number
std::ostringstream dollars;
dollars << '$' << std::fixed << std::left << std::setprecision(2) << number;
// print out the justified temporary string
std::cout << std::setw(16) << std::right << dollars.str() << "\n";
Here they are together so you can play with it:
#include <iomanip>
#include <iostream>
#include <sstream>
int main()
{
double number = 1235495.5432334;
// Left-justified
std::cout << '[';
{
std::cout
<< '$'
<< std::left << std::fixed << std::setw(15) << std::setprecision(2) << number;
}
std::cout << "]\n";
// Right-justified number field only
std::cout << '[';
{
std::cout
<< '$'
<< std::right << std::fixed << std::setw(15) << std::setprecision(2) << number;
}
std::cout << "]\n";
// Both right-justified
std::cout << '[';
{
std::ostringstream dollars;
dollars << '$' << std::fixed << std::left << std::setprecision(2) << number;
std::cout << std::setw(16) << std::right << dollars.str();
}
std::cout << "]\n";
}
[$1235495.54 ]
[$ 1235495.54]
[ $1235495.54]
Remember, many field formatting constraints (such as width) apply only to a single item being output. Building a temporary string is required when messing with specific field sizes.