c++ format cout with "right" and setw() for a string and float
c++ format cout with "right" and setw() for a string and float
我正在尝试格式化 'cout',它必须显示如下内容:
Result $ 34.45
金额 ($34.45) 必须位于具有特定填充量的右侧索引上或在特定列位置结束。我尝试使用
cout << "Result" << setw(15) << right << "$ " << 34.45" << endl;
但是,它是为“$”字符串设置宽度,而不是为字符串加金额设置宽度。
关于处理此类格式有什么建议吗?
您尝试将格式修饰符应用于两个不同类型的参数(字符串文字和 double
),但无法解决。要为 "$ "
和数字设置宽度,您需要先将两者转换为字符串。一种方法是
std::ostringstream os;
os << "$ " << 34.45;
const std::string moneyStr = os.str();
std::cout << "Result" << std::setw(15) << std::right << moneyStr << "\n";
这确实很冗长,因此您可以将第一部分放在辅助函数中。另外,std::ostringstream
格式可能不是最好的选择,你也可以看看std::snprintf
(重载4)。
您需要将 "$ " 和值 34.45 组合成单独的字符串。像这样尝试:
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
stringstream ss;
ss << "$ " << 34.45;
cout << "Result" << setw(15) << right << ss.str() << endl;
}
另一种方法是使用 std::put_money
。
#include <iostream>
#include <locale>
#include <iomanip>
void disp_money(double money) {
std::cout << std::setw(15) << std::showbase << std::put_money(money*100.)<< "\n";
}
int main() {
std::cout.imbue(std::locale("en_US.UTF-8"));
disp_money(12345678.9);
disp_money(12.23);
disp_money(120.23);
}
输出
,345,678.90
.23
0.23
我正在尝试格式化 'cout',它必须显示如下内容:
Result $ 34.45
金额 ($34.45) 必须位于具有特定填充量的右侧索引上或在特定列位置结束。我尝试使用
cout << "Result" << setw(15) << right << "$ " << 34.45" << endl;
但是,它是为“$”字符串设置宽度,而不是为字符串加金额设置宽度。
关于处理此类格式有什么建议吗?
您尝试将格式修饰符应用于两个不同类型的参数(字符串文字和 double
),但无法解决。要为 "$ "
和数字设置宽度,您需要先将两者转换为字符串。一种方法是
std::ostringstream os;
os << "$ " << 34.45;
const std::string moneyStr = os.str();
std::cout << "Result" << std::setw(15) << std::right << moneyStr << "\n";
这确实很冗长,因此您可以将第一部分放在辅助函数中。另外,std::ostringstream
格式可能不是最好的选择,你也可以看看std::snprintf
(重载4)。
您需要将 "$ " 和值 34.45 组合成单独的字符串。像这样尝试:
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
stringstream ss;
ss << "$ " << 34.45;
cout << "Result" << setw(15) << right << ss.str() << endl;
}
另一种方法是使用 std::put_money
。
#include <iostream>
#include <locale>
#include <iomanip>
void disp_money(double money) {
std::cout << std::setw(15) << std::showbase << std::put_money(money*100.)<< "\n";
}
int main() {
std::cout.imbue(std::locale("en_US.UTF-8"));
disp_money(12345678.9);
disp_money(12.23);
disp_money(120.23);
}
输出
,345,678.90
.23
0.23