1

過去 3 時間、次のコードを調整しようとしてきましたが、成功しませんでした。私が間違っていることについて誰かが私に記入してもらえますか? 私の目的は、次のように文字列リテラルを左揃えにし、変数を右揃えにすることです。

Loan amount:             $ 10000.00
Monthly Interest Rate:        0.10%

しかし、これは私が得続けているものです:

Loan amount:             $ 10000.00
Monthly Interest Rate:   0.10%

そして、これは私が試してきたものの最新バージョンです:

cout << setw(25) << "Loan amount:" << right << "$ "<< amount << endl;
cout << setw(25) << "Monthly Interest Rate:"<< right<< rateMonthly << "%" << endl;

助けていただければ幸いです。

4

3 に答える 3

2

setwフィールド幅は、次に出力される項目に対して定義され、その後0 にリセットされます。これが、テキストのみが 25 文字で表示され、行の残りの出力が表示されない理由です。

rightとジャスティファイアは、フィールド内のleftどこに文字を入れるかを定義します。これは、幅が定義されている場合、現在のフィールドにのみ適用されることを意味します。これが、テキストに続く項目にジャスティフィケーションが適用されない理由です。

ここで、期待される結果を取得します。

cout <<setw(25)<< left<< "Loan amount:" <<  "$ "<< setw(10)<<right << amount << endl;
cout <<setw(25)<< left << "Monthly Interest Rate:"<<"  "<<setw(10)<<right<< rateMonthly << " %" << endl; 

$ を数値の隣に配置する場合は、$ と数値を単一の文字列にまとめるか、通貨形式を使用して、出力する単一のオブジェクトに連結する必要があります。

于 2016-02-15T23:42:21.143 に答える
1

これがlive demoです。必要なものを正確に出力する必要があります。で精度を設定する方法はありませんstd::to_string(double)。そのため、それを行う小さなヘルパーを作成しました。

auto to_string_precision(double amount, int precision)
{
    stringstream stream;
    stream << fixed << setprecision(precision) << amount;
    return stream.str();
};

cout << setw(25) << left << "Loan amount:" << setw(10) << right << ("$ " + to_string_precision(amount, 2)) << endl;
cout << setw(25) << left << "Monthly Interest Rate:" << setw(10) << right << (to_string_precision(rateMonthly, 2) + "%") << endl;

別の方法として、私はまだこれの方が見栄えが良いと思います:

cout << setw(25) << left << "Loan amount:" << "$ " << amount << endl;
cout << setw(25) << left << "Monthly Interest Rate:" << rateMonthly << "%" << endl;
于 2016-02-15T23:30:37.427 に答える