独自のストリームマニピュレータ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 << " ";