0

独自のストリームマニピュレータdoubleを使用して作成することにより、通貨として出力しようとしています。iomanipこれを行うには、ostream を返し、ostream を引数として受け取るメソッドを作成します (幅と精度の 2 つの整数引数も同様です)。

std::ostream& Currency(std::ostream& os, int width, int precision)
{
    os << "$";
    os << std::setprecision(precision);
    os << std::right;
    os << std::setw(width);
    os << std::fixed << std::setfill('0');
    return os;
}

ただし、期待している出力ではなく、出力$0000128.00が得られます$0x7ffeb45783d8128.00

私は単に次のように呼んでいます:

cout << Currency(cout, 11, 2) << balance << endl;

何が問題なのかわかりませんが、関数にラップされていることに関係しているようです。関数に含まれていない正確なコードを実際の出力にコピーすると、完全に機能します。

また、バランスで Currency マニピュレーターを実行する前に、以下も実行します。

out << std::right << std::setfill('0') << std::setw(10) << a.accountNo << " ";
out << std::setfill(' ') << std::left << std::setw(19) << a.name << " ";
out << std::setfill(' ') << std::left << std::setw(3) << a.sex << " ";
out << std::setfill(' ') << std::left << std::setw(10) << a.dob.toString() << " ";
out << std::setfill(' ') << std::left << std::setw(40) << a.address << " ";
4

1 に答える 1

1
cout << Currency(cout, 11, 2) << balance << endl;

Currency関数の実行後、次のような結果になります。

cout << cout << balance << endl;

印刷するためのオーバーロードはありませんが、取得している印刷物を起動して生成するブールコンテキストで使用するためostreamの変換がありますvoid*

于 2015-05-26T09:24:36.837 に答える