4

10 進数の値を揃えるのに苦労しています。正しい配置と 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; 

これは次のようになります。
ここに画像の説明を入力

これは私も好きです:
ここに画像の説明を入力

4

1 に答える 1

2

「$」に幅を設定しているため、うまく整列します。ただし、値自体にも設定する必要があります。setw(8)それぞれの前にa を追加し、 a の代わりに afixedを持つ最後のものを除いて、それらをうまく整列させました。別の幅の値が必要な場合もありますが、各行で同じにする必要があります。leftright

理想的な解決策は、使用することstd::put_moneyです(あなたのコメントではできないことがわかりますが、おそらくこれは他の誰かがこの回答を読むのに役立つでしょう)。千の区切り記号を示すためにドルの金額を増やし、バグを 1 つまたは 2 つ修正しました。

#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
于 2014-09-19T14:27:41.843 に答える