如何用setw在数字前输出'$'并使整体右对齐且保留格式
问题:将$与数字作为整体右对齐并保留格式设置
原代码
#include <iostream> #include <iomanip> using std::cout; using std::fixed; using std::showpoint; using std::setprecision; int main() { double number = 85495.5432334; cout << fixed << showpoint << setprecision(2) << setw(15) << "string" << setw(15) << "$" << number; return 0; }
上述代码运行后,$会在15个字符宽度内右对齐,但数字并未跟随$一起对齐。需要将$与后续数字作为一个整体,在15个字符宽度内右对齐,同时保留fixed、showpoint、setprecision(2)的格式设置。此前尝试通过字符串拼接的方式实现整体对齐,但破坏了所需的数字格式,如何兼顾两者?
解决方案
方法1:使用字符串流(std::ostringstream)预处理
先通过字符串流将$和格式化后的数字拼接成完整字符串,再对这个字符串应用setw实现整体右对齐,既保留格式又保证对齐效果:
#include <iostream> #include <iomanip> #include <sstream> using std::cout; using std::fixed; using std::showpoint; using std::setprecision; using std::ostringstream; using std::setw; int main() { double number = 85495.5432334; ostringstream oss; // 先完成$与格式化数字的拼接 oss << "$" << fixed << showpoint << setprecision(2) << number; // 对拼接后的整体字符串应用右对齐 cout << setw(15) << "string" << setw(15) << oss.str(); return 0; }
方法2:使用C++20 std::format(更简洁)
如果你的编译器支持C++20及以上标准,std::format可以直接实现格式控制与整体对齐:
#include <iostream> #include <format> using std::cout; using std::format; int main() { double number = 85495.5432334; // {:>15} 表示右对齐且宽度15,{:.2f}对应fixed+showpoint+precision(2)的效果 cout << format("{:>15}", "string") << format("{:>15}", format("${:.2f}", number)); return 0; }
内容的提问来源于stack exchange,提问作者Bob Joe
相关产品推荐
相关产品推荐

