Моя программа выполняется просто отлично, но мне было интересно, как выровнять вывод, чтобы центы выстраивались в линию, а не в долларах.
Мы начали занятия только пару недель назад, поэтому мы еще не прошли через это. Мой профессор говорит, что пока все в порядке, если они не выровняются, я думаю, что я просто ОКР по этому поводу. Плюс, я думаю, что это выглядит намного чище.
Кроме того, если счет составляет $ 38,40, это будет четыре значащие цифры? Извините, я давно не занимался математикой. В моем выводе я почему-то получаю до пяти значимых цифр. Максимум у меня это четыре. Как бы я это исправить, используя setprecision?
cout << "Bill \t \t $ " << bill << endl;
cout << "Tax at 10.5% \t \t $"<<tax<< endl;
cout << "Sub-total \t \t $"<<subTotal<< endl;
cout << "Tip at 20% \t \t $"<<tip<< endl;
cout << endl;
cout << "Total Bill \t \t \t $"<<totalBill<< endl;
Как вы видите, я пробовал это с помощью клавиши Escape. Как следует из ответа, я должен использовать setw?
Изменить на 9/10:
Я округлил все суммы в долларах до двух десятичных знаков, кроме счета, и не знаю, как это исправить. Спасибо за всю информацию, которую вы мне дали, но она слишком сложна для того, что мы делаем сейчас, поэтому я просто выровнял вещи вручную. Мне все еще нужно добавить setw, а затем исправить все, как только это там. Я просто спрашиваю, почему счет состоит только из трех цифр. Это, наверное, что-то очень простое, что происходит прямо над моей головой.
// Declare variables
double bill, tax, subTotal, tip, totalBill;
// Variables
bill = 38.40;
tax = .105;
tip = .20;
// Calculate the tax
tax = bill * .105;
// Calculate sub-total of bill
subTotal = bill + tax;
// Calculate tip
tip = subTotal * .20;
// Calculate total amount of bill
totalBill = subTotal + tip;
cout << "Bill" " $ " << setprecision(4) << bill << endl;
cout << "Tax at 10.5%" " $ " << setprecision(3) << tax << endl;
cout << "Sub-total" " $ " << setprecision(4) << subTotal << endl;
cout << "Tip at 20%" " $ " << setprecision(3) << tip << endl;
cout << endl;
cout << "Total Bill" " $ " << setprecision(4) << totalBill << endl;
Редактировать: Я починил это. Все хорошо сейчас.
Если вы печатаете деньги, я рекомендую вам взглянуть на C ++ денежный ввод / вывод.
std::put_money
гарантирует, что вы соответствуете международным стандартам и печатаете с правильной округлостью / точностью.
Установите локаль std::cout
за доллары.
std::showbase
решит, печатать ли $
,
//settings for printing as USD
std::cout.imbue(std::locale("en_US.utf8"));
std::cout << std::showbase;
использование станд :: setw а также станд :: влево для форматирования.
Вот пример печати ваших данных:
#include <iostream>
#include <string>
#include <iomanip>
//row data from example
struct Row{
std::string description;
float amount;
};
//function for printing a row
void Print(Row row);
int main(){
//example rows
Row a{"Bill",3840};
Row b{"Tax at 10.5%",403};
Row c{"Sub-total",4243};
Row d{"Tip at 20%",848};
Row e{"Total Bill",5091};
//settings for printing as USD
std::cout.imbue(std::locale("en_US.utf8"));
std::cout << std::showbase;
//format printing
Print(a);
Print(b);
Print(c);
Print(d);
std::cout << '\n';
Print(e);
}
void Print(Row row){
static const int COLUMN_WIDTH{14};
std::cout << std::setw(COLUMN_WIDTH) << std::left << row.description;
std::cout << " " << std::right << std::put_money(row.amount) << '\n';
}
результат:
Bill $38.40
Tax at 10.5% $4.03
Sub-total $42.43
Tip at 20% $8.48
Total Bill $50.91
Одним из возможных способов является использование setw.
cout<<setw(5)<<4.55<<endl;
cout<<setw(5)<<44.55<<endl;
output:
4.55
44.55
Обновить:
как отметил Джонатан Леффлер, <<
Оператор сбрасывает ширину, поэтому код обновляется, чтобы показать, что его следует повторить.
Я хотел бы сделать что-то вроде:
std::cout << std::setw(15) << std::left << "Bill";
std::cout << std::setw(15) << std::right << std::fixed << std::setprecision(2) << bill << std::endl;
std::cout << std::setw(15) << std::left << "Tax @ 10.5%";
std::cout << std::setw(15) << std::right << std::fixed << std::setprecision(2) << tax << std::endl;
Это устанавливает ширину вывода для каждого «столбца» в 15 символов, поэтому вам не нужно полагаться на вкладки. Все «ярлыки» будут выровнены по левому краю, а все цены будут выровнены по правому краю и напечатаны с точностью до 2 знаков после запятой. Это немного надежнее, чем полагаться на вкладки, где вы не можете контролировать количество используемых символов. Вы не можете сделать правильное обоснование с вкладками.