我正在尝试使用double
并使用iomanip
将其输出为货币并编写自己的流操纵器。我这样做是通过编写一个返回ostream的方法并将ostream作为参数(以及两个整数参数,宽度和精度)来实现的。
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;
不确定问题是什么,它似乎与它被包裹在一个函数中有关。如果我将不在函数中的确切代码复制到我的实际输出,那么它可以完美地工作。
在我在余额上运行货币操纵器之前,我也运行:
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 << " ";
答案 0 :(得分:1)
cout << Currency(cout, 11, 2) << balance << endl;
执行Currency
功能后,您最终得到类似于:
cout << cout << balance << endl;
打印ostream
没有重载,但转换为void*
打算在布尔上下文中使用,它会启动并生成您正在获取的打印输出