iomanip操作返回十六进制值

时间:2015-05-26 09:14:51

标签: c++ string double currency iomanip

我正在尝试使用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 << " ";

1 个答案:

答案 0 :(得分:1)

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

执行Currency功能后,您最终得到类似于:

的内容
cout << cout << balance << endl;

打印ostream没有重载,但转换为void*打算在布尔上下文中使用,它会启动并生成您正在获取的打印输出