Я с трудом выравниваю десятичные значения. Я уверен, что это сочетание правильного выравнивания и setprecision / fixed, но, похоже, оно не работает. Я знаю, что задавались другие вопросы по этой теме, но я не нашел четкого решения для получения группы столбцов (уникальные операторы cout для выравнивания).
Это кусок моего кода:
double total_collect, sales, country_tax, state_tax, total_tax;
const double STATE_TAX_RATE = 0.04, COUNTRY_TAX_RATE = 0.02;
// Compute taxes
total_collect = 100;
sales = 100 / 1.06 ;
country_tax = sales * COUNTRY_TAX_RATE;
state_tax = sales * STATE_TAX_RATE;
total_tax = country_tax + state_tax;
//Display
cout << setiosflags(std::ios::right) ;
cout << "Totla Collected: " << setw(7) << "$ " << fixed << setprecision(2) << right << total_collect << endl;
cout << "Sales: " << setw(17) << "$ " << fixed << setprecision(2) << right << sales << endl;
cout << "Country Sales Tax: " << setw(5) << "$ " << fixed << setprecision(2) << right << country_tax << endl;
cout << "State Sales Tax: " << setw(7) << "$ " << fixed << setprecision(2) << right << state_tax << endl;
cout << "Total Sales Tax: " << setw(7) << "$ " << fixed << setprecision(2) << left << total_tax << endl << endl;
Вот как это выглядит:
Это то, что я бы тоже хотел:
Вы устанавливаете ширину на «$», которая хорошо их выравнивает. Но вам также нужно установить его для самих ценностей. Я добавил setw(8)
перед каждым fixed
и это выровняло их хорошо, за исключением последнего, который имеет left
вместо right
, Возможно, вам понадобится другое значение ширины, но оно должно быть одинаковым для каждой строки.
Идеальным решением было бы использовать std::put_money
(Я вижу по вашему комментарию, что вы не можете, но, возможно, это поможет кому-то еще прочитать этот ответ). Я увеличил суммы в долларах для иллюстрации разделителя тысяч и исправил одну или две ошибки:
#include <locale>
#include <iostream>
#include <iomanip>
int main()
{
double total_collect, sales, country_tax, state_tax, total_tax;
const double STATE_TAX_RATE = 0.04, COUNTRY_TAX_RATE = 0.02;
const auto TAX_WIDTH = 10;
const auto LABEL_WIDTH = 19;
// Compute taxes
total_collect = 10000;
sales = total_collect / 1.06 ;
country_tax = sales * COUNTRY_TAX_RATE;
state_tax = sales * STATE_TAX_RATE;
total_tax = country_tax + state_tax;
//Display
std::cout.imbue(std::locale("en_US.utf8"));
std::cout << std::setw(LABEL_WIDTH) << std::left << "Total Collected: "<< std::setw(TAX_WIDTH) << std::right << std::showbase
<< std::put_money(total_collect * 100.0) << std::endl;
std::cout << std::setw(LABEL_WIDTH) << std::left << "Sales: "<< std::setw(TAX_WIDTH) << std::right << std::showbase
<< std::put_money(sales * 100.0) << std::endl;
std::cout << std::setw(LABEL_WIDTH) << std::left << "Country Sales Tax: "<< std::setw(TAX_WIDTH) << std::right << std::showbase
<< std::put_money(country_tax * 100.0) << std::endl;
std::cout << std::setw(LABEL_WIDTH) << std::left << "State Sales Tax: "<< std::setw(TAX_WIDTH) << std::right << std::showbase
<< std::put_money(state_tax * 100.0) << std::endl;
std::cout << std::setw(LABEL_WIDTH) << std::left << "Total Sales Tax: "<< std::setw(TAX_WIDTH) << std::right << std::showbase
<< std::put_money(total_tax * 100.0) << std::endl << std::endl;
}
Я получаю этот вывод:
Всего собрано: $ 10,000.00 Продажи: 9 433,96 $ Налог с продаж страны: $ 188,68 Государственный налог с продаж: $ 377,36 Общий налог с продаж: $ 566,04