问题
I'm writing this code for my programming class and I got everything else to work however my output formatting isn't working out for me.
#include <iostream>
#include <iomanip>
#include <ios>
using namespace std;
int main()
{
double tip_fifteen;
double tip_twenty;
double tax;
double bill;
char dollars = '$';
float meal_cost;
cout << "Enter the meal cost: ";
cin >> meal_cost;
tip_twenty = meal_cost * .20;
tip_fifteen = meal_cost * .15;
tax = meal_cost * 0.0975;
cout << "******************************************" << endl;
//beginning outputs
int digits;
digits = meal_cost * 100 / 100;
cout << setw(10) << left << "Meal Cost " << dollars;
cout << setw(to_string(digits).length() + 3) << fixed << showpoint << setprecision(2) << meal_cost << endl;
cout << setw(10) << left << "Tax " << dollars;
cout << setw(to_string(digits).length() + 3) << fixed << showpoint << setprecision(2) << tax << endl;
cout << setw(10) << left << "Tip (15%) " << dollars;
cout << setw(to_string(digits).length() + 3) << fixed << showpoint << setprecision(2) << tip_fifteen << endl;
//tip outputs then final output statements
cout << setw(10) << left << fixed << setprecision(2) << "Tip (20%) " << dollars << tip_twenty << endl;
bill = tip_fifteen + meal_cost + tax;
cout << "Your total bill is " << fixed << setprecision(2) << dollars << bill << " after 15% gratuity." << endl << "or" << endl;
bill = tip_twenty + meal_cost + tax;
cout << "Your total bill is " << fixed << setprecision(2) << dollars << bill << " after 20% gratuity." << endl;
return 0;
I want my output to look like this
Enter the meal cost: 56
******************************************
Meal Cost $ 56.00
Tax $ 5.46
Tip (15%) $ 8.40
Tip (20%) $ 11.20
Your total bill is 69.86 after 15% gratuity.
or
Your total bill is 72.66 after 20% gratuity.
my output looks like this
Enter the meal cost: 56
******************************************
Meal Cost $56.00
Tax $5.46
Tip (15%) $8.40
Tip (20%) $11.20
Your total bill is $69.86 after 15% gratuity.
or
Your total bill is $72.66 after 20% gratuity.
I'm having a problem using setw with floats however it's not working when i try to set the same variable as an int. I've also tried using setw(25) to see if that would work somehow unfortunately it has not
回答1:
You need to use right
if you want them aligned to the right, you also need to add a space " " after the dollars
cout << setw(10) << left << "Meal Cost " << dollars << " ";
cout << setw(to_string(digits).length() + 3) << fixed << right << showpoint << setprecision(2) << meal_cost << endl;
To this to all of the printed statements and you will get:
******************************************
Meal Cost $ 56.00
Tax $ 5.46
Tip (15%) $ 8.40
Tip (20%) $ 11.20
回答2:
For there to be padding in the price column, setw
has to be set to a large enough width.
For example:
std::cout << "$" << std::setw(10) << std::fixed
<< std::setprecision(2) << 56.0f << std::endl;
Prints:
$ 56.00
Your code sets the width to:
std::to_string(digits).length() + 3
Which is only 5 characters, just enough to fit "56.00". For additional padding on the left you should increase the setw
width.
来源:https://stackoverflow.com/questions/54776464/recite-and-tip-output-alignment-c-output-formatting